2015-02-10 11 views
-1

Я пытаюсь создать функцию, которая будет удалять любые РоКо тег сценария, но не другие теги, как р, Li, оле, пролет, h1, ...Проверьте, если строка содержит JS в PHP

Это что я до сих пор. Я также написал < и> как закодированные символы «% 3C» и «% 3E» и как имя и номер HTML. Пытался делать регулярное выражение для первого, как вы видите "^ < (/)? Script> $". Но это не работает: D

function smartFilter($string) { 
    $string = strtolower($string); 
    if (strpos($string, "<script>") !== FALSE || strpos($string, "&#60;script&#62;") !== FALSE || strpos($string, "&lt;script&gt;") !== FALSE || strpos($string, "%3Cscript%3E") !== FALSE) { 
     $unallowed = array("^<(\/)?script>$", "&lt;script&gt;", "&lt;/script&gt;", "%3Cscript%3E", "%3C/script%3E", "&#60;script&#62;", "&#60;script&#62;"); 
     return preg_replace($unallowed, "", $string); 
    } else { 
     return $string; 
    } 
} 
+0

В своей основе вы должны использовать 'strip_tags()', но если вы хотите, чтобы это действительно защищенным, вы, вероятно, следует искать 3 библиотеки партии, которая делает это еще лучше. – developerwjk

+0

Насколько я знаю, strip_tags удаляет все теги. Но я не хочу этого, потому что у меня есть богатый редактор текстовых полей, и пользователь может вводить заголовки и прочее, но я не хочу, чтобы они вставляли JS-коды. – IEMSlovenia

+2

Вы читали документы? Вы можете указать допустимые теги в функции. – developerwjk

ответ

0

Почему бы не использовать strip_tags из PHP? Ссылка here.

+0

К сожалению, 'strip_tags()' не может использоваться для удаления всего элемента 'script'. Он буквально удаляет только теги и оставляет его содержимое. Это «безопасно», но, вероятно, нежелательно. '

0

Это сделал всю работу, которую я просил: D

function smartFilter($string) { 
    return strip_tags($string, "<p><li><ol><ul><h1><h2><h3><h4><h5><span><b><u><i>"); 
} 
+0

Обратите внимание, что JS все еще может быть встроен встроенным в теги, которые вы разрешаете. 'strip_tags()' предназначен только для управляемого контента, а не для содержимого пользователя. – MrWhite

Смежные вопросы