2009-09-21 84 views
2

如何编写一个模式以与PHP的preg_match函数一起使用来检查包含脚本标记的字符串?使用preg_match查找字符串是否包含脚本标记

+0

通过'脚本标记'你的意思是像/i”,$ string); – 2009-09-21 12:29:56

+1

或者只是'htmlspecialchars'。 – Gumbo 2009-09-21 12:37:06

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 
} 
+0

这个问题只是说“字符串”,这并不一定意味着有一个文档结构... – conny 2009-09-21 12:26:47

3

出于安全原因?基本上,你不能。这里有一些事情我了解到在过去这样做:

  • <a href="javascript:something">...</a>
  • <p onmouseover="something">
  • 有一些URL方案等效于在不同的浏览器javascript:,像jscript:mocha:livescript:的。大多数都没有记录。
  • 旧版本的Netscape处理某些字节(0x94和0x95,我认为?)等同于<>。希望在现代浏览器中没有这样的东西。
  • VBScript。

MySpace试图做到这一点,其结果是“Samy是我的英雄”蠕虫在其他许多安全灾难中将服务中断了一天左右。

所以,如果你想接受HTML的有限子集,仅包括文本和格式,你必须白名单,不黑名单。你必须将标签,属性列入白名单,并且如果你想允许链接,URL方案。这里有一些现有的库,但我不知道在PHP中推荐哪些库。

相关问题