Используйте preg_match, чтобы узнать, содержит ли строка теги скриптов

Как написать шаблон для использования с функцией preg_match PHP, чтобы проверить, есть ли строка, содержащая метки сценариев?

Вы пытаетесь убежать от них? если да, попробуйте следующее (не проверено)

$string=str_replace(array("&", "<", ">"), array("&amp;", "&lt;", "&gt;"), $string); 

Таким образом, сюрприз ждет ваших нападающих.

По соображениям безопасности? В принципе, вы не можете. Вот некоторые вещи, которые я изучил в прошлом:

  • <a href="javascript:something">...</a>
  • <p onmouseover="something">
  • Существует несколько схем URL, которые эквивалентны javascript: в разных браузерах, таких как jscript: livescript: и livescript: Большинство из них недокументированы.
  • Старые версии Netscape обрабатывали определенные байты (0x94 и 0x95, я думаю?) Как эквивалентные <> . Надеюсь, в современных браузерах ничего подобного нет.
  • VBScript.

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 }