如何使用PHP更改<script> <Script> <scRipT> <sCrIpT> and so ..
到<script> <Script>
的所有出现次数
我也想删除
输入将从WYSIWYG编辑器中获取,因此我无法使用strip_tags函数。
Edit 2
有没有其他方式用户可以用某种奇怪的字符来执行javascript
我在网上找到了这个
<scr<!--*-->ipt>
alert('hi')
</script>
但它没有用,有没有这样的可能性?
答案 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>", "<script>", $input);
可以使用preg_replace()
设计更复杂的解决方案以保留案例,但速度会更慢。这可能有用,但如果是我,我会使用str_ireplace()
...
preg_replace("/<(script)>/i", "<$1>", $input);
注意:如果您正在使用XSS预防,则这些都不会考虑<script type=text/javascript>
之类的内容。要真正处理这些情况,您需要将HTML字符串加载到DOMDocument
并删除有问题的脚本节点。
答案 2 :(得分:0)
你有什么理由不能使用htmlspecialchars()
吗?