如何编写用于PHP preg_match函数的模式来检查包含脚本标记的字符串是什么?
答案 0 :(得分:3)
出于安全考虑?基本上,你不能。以下是我在过去学到的一些事情:
<a href="javascript:something">...</a>
<p onmouseover="something">
javascript:
的网址方案,例如jscript:
,mocha:
和livescript:
。大多数都没有记录。<>
。希望在现代浏览器中没有这样的东西。MySpace尝试这样做,结果就是“Samy是我的英雄”蠕虫,它将这项服务推迟了一天左右,其中包括许多其他安全灾难。
因此,如果您想接受仅包含文本和格式的HTML的有限子集,则必须白名单,而不是黑名单。您必须将标签,属性列入白名单,并且如果您想允许链接,URL方案。有一些现有的库可以做到这一点,但我不知道在PHP中推荐哪些库。
答案 1 :(得分:1)
Don't use regular expressions for processing xml/html.您应该使用DOM classes of PHP,它应该比您找到的任何正则表达式更可靠:
$document = new DOMDocument();
$document->loadHtml($html);
$xpath = new DOMXPath($document);
if ($xpath->query('//script')->length > 0) {
// document contains script tags
}
答案 2 :(得分:0)
你想逃脱他们吗?如果是这样尝试以下(未经测试)
$string=str_replace(array("&", "<", ">"), array("&", "<", ">"), $string);
通过这种方式,一个惊喜将是等待你的攻击者。