我想在我的Web应用程序中阻止XSS攻击.我发现HTML编码输出可以真正防止XSS攻击.现在的问题是我如何对我的应用程序中的每个输出进行HTML编码?我有办法实现自动化吗?
我很欣赏JSP,ASP.net和PHP的答案.
你不应该做的一件事就是过滤输入数据.人们经常建议这样做,因为它是最简单的解决方案,但它会导致问题.
输入数据除了作为HTML输出外,还可以发送到多个地方.例如,它可能存储在数据库中.过滤发送到数据库的数据的规则与过滤HTML输出的规则非常不同.如果您对输入中的所有内容进行HTML编码,则最终会在数据库中使用HTML.(这也是为什么PHP的"魔术引号"功能是个坏主意.)
您无法预测输入数据将传输的所有位置.安全的方法是在数据发送到某处之前准备好数据.如果您要将其发送到数据库,请转义单引号.如果要输出HTML,请转义HTML实体.一旦它被发送到某个地方,如果您仍然需要处理数据,请使用原始的未转义版本.
这是更多的工作,但您可以通过使用模板引擎或库来减少它.