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