我正在努力了解可用和适当的应对措施的最新情况,以积极减少2011年被XSS列车撞到的机会。
我用谷歌搜索了一下,发现网上有很多库可以帮助解决XSS问题,这些库自豪而大胆地指出“XSS/SQL注入问题到此为止”。
我发现这些库至少有以下两种症状之一:
PHP出现已经有一段时间了,filter_var
等函数也伴随着这个远非正统的strip_tags
。我远不是这些安全问题的专家,真的不知道它是否能确保未来的良好睡眠。
我在2011年减少XSS注入的最好机会是什么,而不会使我的代码膨胀,不管有没有过时的库?
发布于 2011-02-22 04:52:17
最好的解决方案是使用模板引擎,它不允许您将任何数据输出为纯HTML,除非您显式地告诉它这样做。如果您必须手动转义,那么很容易忘记一些东西并使自己暴露在XSS攻击的风险之下。
如果你没有一个真正的模板entine,那就使用htmlspecialchars()。
发布于 2011-02-22 11:10:36
我完全同意Matti Virkkunen的观点,或者我认为Matti的回答暗示了什么,所以让我大声而明确地说:nothing将“删除所有恶意代码”。您永远不会知道数据将如何在应用程序的其他部分或将来使用。您可以为SQL“净化”它,但是您不应该把任何未转义的东西放在SQL中的第一位。您可以为HTML“净化”它,但是您永远不应该在HTML中包含任何未转义的数据。您可以将其"purify“到shell脚本中的awk参数中,但是……你明白了吧。
即使是停止问题也是无法确定的,更不用说任何给定代码或数据的恶意意图了。从长远来看,任何输入“净化”的方法都是无用的。需要的是正确的数据转义。一直都是。因此,如果要在SQL查询中包含任何内容,请将其作为数据包含,而不是作为代码包含。如果要在博客帖子中打印用户名,请将其包括为文本而不是HTML。如果用户名是HTML编码的或作为文本节点动态添加到DOM中,那么任何人都不会因为看到来自“or alert('XSS');”的注释而受到伤害。
所有的自动净化工具只不过是添加到您的程序中的一粒魔法灰尘,以确保它的安全性。他们说:“在这里--我们已经让你所有的数据变得纯洁,所以你现在可以安全地使用它,而不需要担心数据的边界!”这只会导致一种错误的安全感。作为开发人员,我们需要对数据的输出负责,永远不要认为一切都很好,因为我们有一个工具可以让我们所有的数据“安全”,无论这在输入时意味着什么。
发布于 2011-06-21 19:15:46
essential security rules的规则3b几乎就是它的全部。在输出之前,坚持一致地转换用户输入,你就是安全的。
https://stackoverflow.com/questions/5071116
复制相似问题