删除<script>标记 - PHP </script>

时间:2011-05-13 02:59:38

标签: php javascript

如何使用PHP更改<script> <Script> <scRipT> <sCrIpT> and so ..&lt;script&gt; &lt;Script&gt;的所有出现次数 我也想删除

输入将从WYSIWYG编辑器中获取,因此我无法使用strip_tags函数。

Edit 2
有没有其他方式用户可以用某种奇怪的字符来执行javascript 我在网上找到了这个

<scr<!--*-->ipt>
alert('hi')
</script>

但它没有用,有没有这样的可能性?

3 个答案:

答案 0 :(得分:6)

简单地从不受信任的输入中删除<script>标记不足以防范XSS攻击。例如,<a href="#" onmouseover="alert('pwned!');"> - 我只是将脚本放在您的页面中 - 而不使用<script>标记 - 并且窃取了您的Cookie。糟糕。

在这种情况下,您确实需要使用a well-tested library that actually parses the HTML and removes the stuff you don't want

答案 1 :(得分:3)

对于不区分大小写的替换,可能最简单的方法是str_ireplace(),但这不会保留“sCriPt”字的情况。但是,如果你想要解决XSS攻击,那可能就好了:

str_ireplace("<script>", "&lt;script&gt;", $input);

可以使用preg_replace()设计更复杂的解决方案以保留案例,但速度会更慢。这可能有用,但如果是我,我会使用str_ireplace() ...

preg_replace("/<(script)>/i", "&lt;$1&gt;", $input);

注意:如果您正在使用XSS预防,则这些都不会考虑<script type=text/javascript>之类的内容。要真正处理这些情况,您需要将HTML字符串加载到DOMDocument并删除有问题的脚本节点。

答案 2 :(得分:0)

你有什么理由不能使用htmlspecialchars()吗?