【问题标题】:Cross-Site Scripting: Poor Validation (Input Validation and Representation, Data Flow)跨站点脚本:验证不佳(输入验证和表示、数据流)
【发布时间】:2016-05-23 04:30:56
【问题描述】:

我已在 HP fortify 门户中扫描我的应用程序并遇到问题跨站点脚本:不良验证(输入验证和表示、数据流)。

我已经在使用 ESAPI 库了。

我应该怎么做才能解决这个问题。是否有任何其他库/jar 来验证输入。

提前致谢。

【问题讨论】:

  • 验证不佳?纠正它!

标签: java struts fortify esapi


【解决方案1】:

Fortify “跨站点脚本:验证不佳”抱怨您的 OUTPUT 编码不正确或无效。输出编码(转义)的目的是将特殊字符(元字符)限制为文字字符串,因此它们不能作为命令执行。

要补救,您可以:

步骤#1. 确定谁将使用这个“待编码上下文”?

步骤#2. 根据传输协议和下游需求正确编码上下文。例如:

  • 如果在 URL 的 [?query] 部分使用数据,您需要找到一个函数来包装(也称为编码、转义)18 个保留字符(!* ' () ; : @ & = + $ , / ? #[]) 对 HTTP 协议有特殊意义(不必对整个 URL 进行编码)。 (详情请阅读RFC3986 Sec 2.2
  • 如果数据作为 XML 实体使用,您需要编码 5 个元字符 (& " ')(检查W3C XML Spec Sec 2.4)。但是,这并不总是正确的。用作注释的数据,处理指令,或在 CDATA 部分不需要编码。

步骤#3.收集编码示例以供将来选择和使用:(对不起,当发布为代码时,某些内容发生了变化,所以发布为图像)

需要考虑 ESAPI 库的开销,一次修复加载 30 MB jar 是否值得?

使用轻量级 org.owasp.encoder 库进行输出编码

【讨论】:

    【解决方案2】:

    Fortify 非常了解 ESAPI 库,所以您能告诉我您在 inout 和 output 调用时调用的是 ESAPI 库的哪个函数吗?您可以参考https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet 了解您必须用于 XSS 的各种上下文和验证,并根据您需要使用 ESAPI 函数的上下文。

    在您的情况下,您使用的简单编码不是一个准确的解决方案,因此尽管 fortify 降低了严重性,但仍然是一个问题,因此请在源和接收器处使用正确的 ESAPI 函数。 Fortify 不应该标记一个问题。而且,如果您看到它,然后创建一个自定义规则,如另一个答案中所述。

    【讨论】:

    • 我已经使用 ESAPI.encoder() 对值进行编码。我走对了吗?
    • 抱歉在旅行,这是不正确的,您需要根据您的上下文使用编码......我可以看到其他用户已经详细回答了......这看起来是一个完美的解决方案。跨度>
    【解决方案3】:

    当您使用编码来防止 XSS 时会发生这种情况。如果你没有编码,你会得到一个关键的 XSS 发现。由于您正在编码,因此它已移至媒体。为了完全防止 XSS,您需要在给定上下文的情况下使用正确的编码,然后确保您的输入得到验证。有一些库可以提供帮助,例如 Apache Struts Validator,但即使这样,Fortify 也无法准确确定您的输入验证是否足够。静态分析产品无法确定变量内的数据类型,因此确实没有检查正确验证的好方法。您要做的是验证输入,一旦您确定结果对编码和输入验证感到满意,您就可以取消该结果。

    编写验证方法后,您可以将它们存储在 jar 文件中,然后为 Fortify 编写自定义规则,以便它知道这些方法提供 XSS 验证。在以后的扫描中不会出现此问题。查看 Fortify 自定义规则指南中的数据流清理规则。

    【讨论】:

    • 您好,感谢您的帮助
    猜你喜欢
    • 2013-01-30
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2015-09-08
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多