我知道一些典型的函数,如htmlentities、特殊字符、字符串替换等等,但是否有一个简单的代码或函数可以对所有情况都是安全的呢?
任何想法都很棒。非常感谢:)
编辑:有些通用的东西可以剥离掉任何可能危险的东西,比如大于/小于符号、分号、像“DROP”这样的单词等等?
我基本上只想把所有东西压缩成字母数字,我猜...?
永远不要向HTML流输出任何未经过htmlspecialchars()
处理的数据位,这样就可以消除任何XSS风险。这是一个简单易行的规则,容易遵循。
虽然如此,作为程序员,这是您的工作。
您可以定义
function h(s) { return htmlspecialchars(s); }
htmlspecialchars()
太长了。另一方面,使用htmlentities()
则完全没有必要。?
、&
、=
、#
)。数据是查询字符串中的所有内容:参数名称和值。确保它们不被错认为是代码,必须进行转义。<a href>
中的URL进行适当的HTML转义),并不意味着这样做就是好的或正确的。跨站脚本攻击是一个问题,起因是a)人们不知道数据/代码分离(即"转义"),或者他们粗心大意,以及b)试图聪明地规避数据中无需转义的内容。<img src="javascript:xss()">
(现在大多数浏览器都可以防止这种情况,但还存在其他风险) - Quentinmysqli_*
或 PDO)。因为它们可以完全消除 SQL 注入。 - Tomalak我认为Google-caja可能是一个解决方案。我编写了一款用于检测和自动预防Java Web应用程序中的XSS攻击的污点分析器,但不适用于PHP。我认为学习使用caja对Web开发人员来说是个好东西。
没有。风险取决于您对数据的处理方式,您无法编写使数据对所有情况都安全的程序(除非您想丢弃大部分数据)。
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
为了避免 JavaScript 攻击,你可以尝试使用开源卓越提供的这个项目。https://www.opensource-excellence.com/shop/ose-security-suite.html
我的网站以前遭受过JS攻击,但是这个工具每天都帮我阻止所有的攻击。我认为它可以帮助你们避免这个问题。
此外,你可以在你的PHP脚本中添加一个过滤器来过滤所有的JS攻击,这里有一个可以完成任务的模式:
if (preg_match('/(?:[".]script\s*()|(?:\$\$?\s*(\s*[\w"])|(?:/[\w\s]+/.)|(?:=\s*/\w+/\s*.)|(?:(?:this|window|top|parent|frames|self|content)[\s*[(,"]\s[\w\$])|(?:,\s*new\s+\w+\s*[,;)/ms', strtolower($POST['VARIABLENAME']))) { filter_variable($POST['VARIABLENAME']); }
<>
符号以外,其他都与XSS无关。而htmlspecialchars()可以处理它们。DROP table
这个词并不会造成任何伤害 ;)"
来关闭属性,然后继续编写自己的代码呢?<img src="user-supplied-stuff" onerror="alert(document.cookie)">
看起来对我来说有点 XSS。 :-) - janmoesenhtmlspecialchars
会捕获双引号,所以你最终应该得到 <img src="user-supplied-stuff" onerror="alert(document.cookie)">
。但是对于图片,你应该先检查图片是否存在,以避免出现损坏的图片。 - DisgruntledGoat为了清洁用户数据,请使用html_special_chars(); str_replace()
和其他函数来剪切不安全的数据。
mysql_escape_string
已被弃用,无法正确处理字符编码。 - Quentin$data="'".mysql_real_escape_string($data)."'";
或绑定。还有一些关于运算符/标识符的规则。但这与XSS无关。 - Your Common Sense