我已在HP fortify门户中扫描我的应用程序并遇到问题跨站点脚本:差的验证(输入验证和表示,数据流)。
我已经在使用ESAPI库了。
我该怎么做才能解决这个问题。是否有任何其他库/ jar来验证输入。
提前致谢。
答案 0 :(得分:4)
Fortify“跨站点脚本:差评验”抱怨您的OUTPUT编码不正确或无效。输出编码(转义)的目的是将特殊字符(元字符)限制为文字字符串,因此它们不能作为命令执行。
要修复,请执行以下操作:
步骤#1。确定谁将使用此“编码上下文”?
步骤#2。根据传输协议和下游需求正确编码上下文。例如:
步骤#3。收集编码示例以供将来选择和使用:(抱歉,当发布为代码时,某些内容发生了变化,因此发布为图片)
使用轻量级org.owasp.encoder库输出编码
答案 1 :(得分:0)
当您使用编码来阻止XSS时会发生这种情况。如果你没有编码,你会得到一个关键的XSS发现。由于您正在进行编码,因此将其移至介质中。要完全阻止XSS,您可能希望在给定上下文的情况下使用正确的编码,然后确保您的输入正在验证。有些库可以提供帮助,例如Apache Struts Validator,但即使这样,Fortify也无法准确确定您的输入验证是否足够。静态分析产品无法确定变量内部的数据类型,因此检查正确的验证确实没有好办法。您要做的是验证输入,一旦您确定编码和输入验证的结果令人满意,您就可以取消查找。
在编写验证方法之后,您可以将它们存储在jar文件中,然后为Fortify编写自定义规则,以便它知道这些方法提供XSS验证。在将来的扫描中不会发生此问题。查看Fortify自定义规则指南中的数据流清理规则。
答案 2 :(得分:0)
Fortify非常了解ESAPI库所以请您告诉我您在inout和输出调用中调用的ESAPI库的哪个函数?您可以参考https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet获取必须用于XSS的各种上下文和验证,并根据您使用ESAPI函数所需的上下文。
在你的情况下,你使用的是简单的编码,这不是一个准确的解决方案,所以尽管fortify降低了严重性,但仍然是一个问题,所以请在源和接收器上使用正确的ESAPI函数。 Fortify不应该标记问题。如果你看到它然后创建一个自定义规则,如另一个答案所述。