Используйте preg_match, чтобы найти, содержит ли строка теги script - PullRequest
2 голосов
/ 21 сентября 2009

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

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

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

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

MySpace попытался сделать это, и в результате был получен червь «Сами - мой герой», который остановил службу на день или около того, среди множества других бедствий безопасности с их стороны.

Поэтому, если вы хотите принять ограниченное подмножество HTML, которое включает в себя только текст и форматирование, вы должны белый список , а не черный список . Вы должны добавить в белый список теги, атрибуты и, если вы хотите разрешить ссылки, схемы URL. Для этого существует несколько библиотек, но я не знаю, какие из них рекомендовать в PHP.

1 голос
/ 21 сентября 2009

Не используйте регулярные выражения для обработки xml / html. Вам лучше использовать DOM-классы PHP , это должно быть намного надежнее любого регулярного выражения, которое вы найдете:

$document = new DOMDocument();
$document->loadHtml($html);
$xpath = new DOMXPath($document);
if ($xpath->query('//script')->length > 0) {
    // document contains script tags
}
0 голосов
/ 21 сентября 2009

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

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

Таким образом, враги будут ждать сюрприз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...