删除<script>标签 - PHP

Sou*_*rav 5 javascript php

如何更改的所有发生<script> <Script> <scRipT> <sCrIpT> and so ..&lt;script&gt; &lt;Script&gt;用PHP
我也想删除

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

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

<scr<!--*-->ipt>
alert('hi')
</script>
Run Code Online (Sandbox Code Playgroud)

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

jos*_*736 6

简单地<script>从不受信任的输入中删除标签不足以防止XSS攻击.例如,<a href="#" onmouseover="alert('pwned!');">- 我只是将脚本放在您的页面中 - 不使用<script>标签 - 并偷走了您的cookie.哎呀.

在这种情况下,您确实需要使用经过良好测试的库来实际解析HTML并删除您不想要的内容.


Mic*_*ski 3

最简单的方法可能是str_ireplace()不区分大小写的替换,但这不会保留“sCriPt”单词的大小写。但如果您要消除 XSS 攻击,那么可能就没有问题:

str_ireplace("<script>", "&lt;script&gt;", $input);
Run Code Online (Sandbox Code Playgroud)

可以设计一个更复杂的解决方案来preg_replace()保护大小写,但速度会更慢。这可能有用,但如果是我,我会用str_ireplace()......

preg_replace("/<(script)>/i", "&lt;$1&gt;", $input);
Run Code Online (Sandbox Code Playgroud)

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