作者:echo7111436 | 2023-08-12 16:25
如何仅使用HTML和PHP来阻止XSS(跨站点脚本)?
我已经看过很多关于这个主题的帖子,但我还没有找到一篇清晰简明地说明如何实际防止XSS的文章.
1> Alix Axel..:
基本上,htmlspecialchars()
只要您想要将某些内容输出到来自用户输入的浏览器,您就需要使用该功能.
使用此函数的正确方法是这样的:
echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
Google Code University也有关于网络安全的这些非常有教育意义的视频:
如何打破网络软件 - 看看网络软件中的安全漏洞
每个工程师需要了解的安全性以及在哪里学习它
htmlspecialchars或htmlentities?点击这里http://stackoverflow.com/questions/46483/htmlentities-vs-htmlspecialchars
@TimTim:对于大多数情况,是的.但是,当你需要允许HTML输入时,事情变得有点棘手,如果是这种情况,我建议你使用像http://htmlpurifier.org/这样的东西.
大部分时间都是正确的,但并不是那么简单.您应该考虑将不受信任的字符串放入HTML,Js,Css中,并考虑将不受信任的HTML放入HTML中.看看这个:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
如果你需要接受HTML输入使用HTML Purifier,如果不使用`htmlspecialchars()`.
2> Wahyu Kristi..:
我最喜欢的OWASP引用之一是跨站点脚本解释,因为虽然有大量的XSS攻击向量,但以下几条规则可以大大防御其中的大多数!
这是PHP安全备忘单
我也是..这是XSS Filter Evasion Cheat Sheet https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
此页面不再存在
3> James Kolpac..:
其中一个最重要的步骤是在处理和/或渲染回浏览器之前清理任何用户输入.PHP有一些可以使用的" 过滤器 "功能.
XSS攻击通常具有的形式是插入一些链接到一些包含用户恶意意图的异地javascript.在这里阅读更多相关信息.
您还需要测试您的网站 - 我可以推荐Firefox附加XSS Me.
@TimTim - 没有.**所有用户输入**应该**始终被视为本身就是敌对的.
4> Scott Arcisz..:
按优先顺序排列:
如果您使用的是模板引擎(例如Twig,Smarty,Blade),请检查它是否提供了上下文相关的转义.我从Twig的经验中知道.{{ var|e('html_attr') }}
如果要允许HTML,请使用HTML Purifier.即使您认为您只接受Markdown或ReStructuredText,您仍然希望净化这些标记语言输出的HTML.
否则,请使用htmlentities($var, ENT_QUOTES | ENT_HTML5, $charset)
并确保文档的其余部分使用与之相同的字符集$charset
.在大多数情况下,'UTF-8'
是所需的字符集.
另外,请确保在输出时退出,而不是在输入时退出.
5> Matt S..:
将此作为SO文档测试版中的合并参考进行交叉发布,该测试将脱机.
问题
跨站点脚本是Web客户端意外执行远程代码.如果任何Web应用程序从用户获取输入并直接在网页上输出,则可能会将自身暴露给XSS.如果输入包括HTML或JavaScript,则当Web客户端呈现此内容时,可以执行远程代码.
例如,如果第三方包含JavaScript文件:
// http://example.com/runme.js
document.write("I'm running");
PHP应用程序直接输出传递给它的字符串:
' . $_GET['input'] . '
第三方JavaScript将运行,用户将在网页上看到"我正在运行".
作为一般规则,永远不要相信来自客户的输入.每个GET,POST和cookie值都可以是任何值,因此应该进行验证.输出任何这些值时,请将它们转义,以便不会以意外方式对它们进行求值.
PHP根据上下文提供了一些转义输出的方法.
PHPs过滤器函数允许以多种方式对PHP脚本的输入数据进行清理或验证.它们在保存或输出客户端输入时很有用.