防止服务器端脚本,XSS

时间:2010-06-03 11:23:09

标签: php mysql security xss

是否有任何预先制作的脚本可用于PHP / MySQL以防止服务器端脚本和JS注入?

我知道典型的功能,例如htmlentities,特殊字符,字符串替换等,但是有一些简单的代码或一个对所有内容都是安全的函数吗?

任何想法都会很棒。非常感谢:))

编辑:通用的东西可以去除任何可能有害的东西,即。大于/小于标志,分号,像“DROP”等词?

我基本上只想将所有内容压缩为字母数字,我猜......?

7 个答案:

答案 0 :(得分:5)

永远不要将任何数据输出到尚未通过htmlspecialchars()的HTML流中,您就完成了。简单的规则,易于遵循,完全消除任何XSS风险。

作为程序员,这是你的工作。

您可以定义

function h(s) { return htmlspecialchars(s); }

如果htmlspecialchars()太长,无法为每个PHP文件写入100次。另一方面,根本不需要使用htmlentities()


关键是:有代码,有数据。如果你混淆了两者,那么就会发生不好的事情。

对于HTML,代码是元素,属性名称,实体,注释。数据就是其他一切。必须转义数据以避免被误认为代码。

对于URL,代码是方案,主机名,路径,查询字符串的机制(?&=# )。数据是查询字符串中的所有内容:参数名称和值。他们必须进行转义,以免被误认为代码。

HTML 中嵌入的网址必须进行双重转义(通过网址转义 HTML转义),以确保代码和数据的正确分离。

现代浏览器能够将令人惊讶的破碎和不正确的标记解析为有用的东西。但是,不应强调这种能力。某些事情恰好起作用的事实(例如<a href>中没有应用适当的HTML转义的URL)并不意味着这样做是好的或正确的。 XSS是一个问题,其根源在于a)人们不知道数据/代码分离(即“逃避”)或那些草率的人和b)试图聪明地知道他们不需要逃避哪些数据部分的人。

XSS很容易避免,如果你确定你不属于类别a)和b)。

答案 1 :(得分:3)

我认为Google-caja可能是一种解决方案。我为java web应用程序编写了一个污点分析器来自动检测和阻止XSS。但不适用于PHP。我认为学习使用caja对于Web开发人员来说并不坏。

答案 2 :(得分:1)

不,没有。风险取决于您对数据的处理方式,您无法编写使数据安全的内容(除非您想丢弃大部分数据)

答案 3 :(得分:1)

  

是否有一个简单的代码或一个功能,对所有事情都是安全的?

没有

离开PHP的数据表示必须根据其去向进行转换/编码。因此,只应在离开PHP的位置进行转换/编码。

℃。

答案 4 :(得分:0)

您可以参考OWASP以更多地了解XSS攻击:

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

为避免js攻击,您可以尝试开源卓越提供的这个项目:

https://www.opensource-excellence.com/shop/ose-security-suite.html

我的网站之前有过js攻击,这个工具可以帮助我每天阻止所有攻击。我认为它可以帮助你们避免这个问题。

此外,您可以在php脚本中添加一个过滤器来过滤所有js攻击,这里有一个可以完成工作的模式:

if(preg_match(&#39; /(?:[&#34;。] script \ s *()|(?:\ $ \ $?\ s *(\ s * [\ w&#34; ])|(?:/ [\ W \ S] + /)|(:= \ S * / \ W + / \ S *)|(:( ?:此|窗口|顶部|父|帧。? |自|内容)[\ S * [(&#34;] \ S [\ W \ $])|(:,\ S *新\ S + \ W + \ S * [? ,;)/ ms&#39;,strtolower($ POST [&#39; VARIABLENAME&#39;])))                     {                         filter_variable($ POST [&#39; VARIABLENAME&#39;]);                     }

答案 5 :(得分:-1)

要回答您的版本:除了<>符号之外的所有内容都与XSS无关 而htmlspecialchars()可以处理它们。

页面文字中DROP table一词没有任何损害;)

答案 6 :(得分:-3)

用于清洁用户数据 html_special_chars(); str_replace()以及其他用于删除不安全数据的函数。