Istenmeyen etiketleri sıyırma sonra, metin girişi başka ne yapmalıyım?

6 Cevap php

Bir PHP komut dosyası bir textarea adlı kullanıcı girişi kabul ve birkaç temel etiketleri izin istiyor değilim. Peki ne zaman çıktı ben kullanıyorum dize -

echo strip_tags($content, '<b><i><ul><ol><li>');

Şimdi normalde ben FILTER_SANITIZE_STRING kullanmak istiyorum ama tüm bu etiketleri şerit olacak ve ben html_entities() kullanmak istiyorum ama ben onlar gerektiği gibi görüntülenmesini geçiyordum etiketlerini önleyecektir.

Peki başka ne şerit veya kodlamak gerekiyor ve bunu nasıl yapabilirim?

6 Cevap

Ben güvenlik amacıyla strip_tags() güvenebilirsiniz sanmıyorum - dan http://php.net/strip_tags:

This function does not modify any attributes on the tags that you allow using allowable_tags , including the style and onmouseover attributes that a mischievous user may abuse when posting text that will be shown to other users.

Bu tam olarak ne istediğinizi yapmak gerekir HTML Purifier veya PEAR HTML_Safe gibi bir şey, bakmak için daha iyi olabilir.

Muhtemelen böyle bir style yanı sıra kaldırmak isteyen bazı özellikler vardır. Ayrıca onMouseOver ve onClick, vb gibi olay işleyicileri kaldırmak isteyebilirsiniz

Ben filtreleme etiketleri için çok iyi bir hafif PHP4 / 5 kütüphane ve giriş özniteliklerini geçmişte Cal Henderson'un lib_filter ile başarı yaşadım. Sen izin etiketlerini belirtebilirsiniz / 'izin' üye değişken örneğin yoluyla bağlıyor Aşağıdaki kod YouTube / Vimeo / Flickr vb gibi sitelerden embed kodu sanitizes ama her şeyi dışarı şeritler:

        $lib_filter = new lib_filter();
        $lib_filter->allowed = array(
            'object' => array('width', 'height'),
            'param' => array('name', 'value'),
            'embed' => array('src', 'type', 'allowscriptaccess', 'allowfullscreen', 'width', 'height')
        );
        $video = $lib_filter->go($input);

XSS cheat sheet belirtilen kurallara karşı girişini kontrol edin. Ayrıca güvenlik standı noktasından, bu OWASP Guide to Building Secure Web Applications and Web Services ile yakından tanımak için iyi olurdu

Bu kullanabilirsiniz

echo filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW)

çok iyi öğretici:

http://www.phpro.org/tutorials/Filtering-Data-with-PHP.html#12

Buna ne dersiniz

function stripSingleTags($tags, $string)
{
    foreach( $tags as $tag )
    {
        $string = preg_replace('#</?'.$tag.'[^>]*>#is', '', $string);
    }
    return $string;
}

/*** example usage ***/
$string = '<p>stuff</p><span>more <span class="foo">and even>< more</span> stuff here</span>';

$tags = array('h1', 'span');

echo stripSingleTags($tags, $string);

Source: http://www.phpro.org/examples/Strip-Single-Tag.html