我正在为我的 Web 应用程序构建一个基本的安全层。我正在寻求对我正在采取的步骤的验证。当前的重点是 XSS,所以我在这篇文章中不涉及数据库。这是我到目前为止所做的:
- htmlspecialchars() 所有用户输入
- 将某些关键字列入黑名单 {"","","text/javascript"} :我正在使用 preg_replace 将这些单词替换为 ""。
- 输出转义所有动态内容。
所有这些似乎都是一个非常微不足道的安全层。谁能推荐更好的策略?
你的方法太简单了。htmlspecialchars 在每种情况下都无济于事。
这是一个非常好的关于 XSS 的备忘单,以及当您转义将放入 HTML 的字符串时会出现什么问题。
https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
黑名单也有它的缺点。例如,某些浏览器可能会解析
text/javascript
和
text/java
script
一样的方法。新行和空格从后者中删除,因此它被解释为第一个。所以黑名单不会是防弹方法。
最好的策略是使用一些已经为您处理所有这些的模板库。库必须知道字符串所在的上下文。元素值需要与属性值不同的转义。