Как написать шаблон для использования с функцией preg_match PHP, чтобы проверить, есть ли строка, содержащая метки сценариев?
Вы пытаетесь убежать от них? если да, попробуйте следующее (не проверено)
$string=str_replace(array("&", "<", ">"), array("&", "<", ">"), $string);
Таким образом, сюрприз ждет ваших нападающих.
По соображениям безопасности? В принципе, вы не можете. Вот некоторые вещи, которые я изучил в прошлом:
<a href="javascript:something">...</a>
<p onmouseover="something">
javascript:
в разных браузерах, таких как jscript:
livescript:
и livescript:
Большинство из них недокументированы. <>
. Надеюсь, в современных браузерах ничего подобного нет. MySpace попытался это сделать, и результатом стал червь «Самми мой герой», который в течение дня или около того снял эту услугу, среди множества других бедствий безопасности со своей стороны.
Поэтому, если вы хотите принять ограниченное подмножество HTML, которое включает только текст и форматирование, вы должны иметь белый список , а не черный список . У вас есть белый список тегов, атрибутов и если вы хотите разрешить ссылки, схемы URL. Для этого существует несколько существующих библиотек, но я не знаю, какие из них рекомендуются в PHP.
Не используйте регулярные выражения для обработки xml / html. Вы должны использовать классы DOM PHP , они должны быть намного надежнее, чем любое регулярное выражение, которое вы найдете:
$document = new DOMDocument(); $document->loadHtml($html); $xpath = new DOMXPath($document); if ($xpath->query('//script')->length > 0) { // document contains script tags }