我对PHP很新,但我听说XSS漏洞很糟糕。我知道它们是什么,但我如何保护我的网站?
答案 0 :(得分:10)
为防止XSS攻击,您只需检查并验证您计划使用的所有用户输入数据,并且不允许从该表单插入html或javascript代码。 或者您可以使用htmlspecialchars()将HTML字符转换为HTML实体。所以像<>这样的字符标记开头/结尾的标签变成了html实体,你可以使用strip_tags()只允许一些标签,因为函数不会去除onclick或onload等有害属性。
答案 1 :(得分:4)
使用htmlentities()函数转义所有用户数据(来自用户的数据库中的数据)。
对于HTML数据(例如来自WYSIWYG编辑器),在将数据保存到数据库之前使用HTML Purifier清除数据。
答案 2 :(得分:0)
strip_tags()
如果您想要根本没有标签。含义如<somthinghere>
htmlspecialchars()
会将它们转换为html,因此浏览器只会显示而不会尝试运行
如果你想允许好的HTML,我会使用像htmLawed或htmlpurifier
答案 3 :(得分:0)
不幸的是,preventing XSS in PHP是一件非常重要的事情。
与使用预准备语句和精心挑选的白名单缓解的SQL injection不同,没有可证明的安全方法将您尝试传递给HTML文档的信息与文档结构的其余部分分开
但是,您可以通过对转义(and keeping your software up-to-date)特别谨慎来减轻已知的攻击媒介。
要记住的最重要的规则:始终在输出时转义,从不输入。如果您担心性能,可以安全地缓存转义输出,但始终存储和操作未转义的数据。
按优先顺序排列:
{{ var|e('html_attr') }}
htmlentities($var, ENT_QUOTES | ENT_HTML5, $charset)
并确保文档的其余部分使用与$charset
相同的字符集。在大多数情况下,'UTF-8'
是所需的字符集。尝试在输入上过滤XSS为premature optimization,这可能会导致其他地方出现意外漏洞。
例如,最近WordPress XSS vulnerability使用了MySQL列截断来打破其转义策略并允许过早转义的有效负载存储不安全。不要重复他们的错误。