【问题标题】:ESAPI encoding give different output on UIESAPI 编码在 UI 上给出不同的输出
【发布时间】:2019-07-12 06:34:32
【问题描述】:

我正在尝试在我的 spring-mvc 项目中实现 ESAPI 编码以防止 XSS 攻击。我的方法是在将输入发送回响应之前,我将使用 ESAPI.encoder() 对其进行编码,以便在页面响应中对输入属性进行编码。

我的假设是,当我返回编码响应时,在我的页面响应中我将获得编码字符,在我的输入字段中我将获得普通字符,但我的输入字段也设置了编码字符。

以下是我在发送响应之前在控制器中编写的示例代码。

model.addAttribute("input", setValue(ESAPI.encoder().encodeForHTMLAttribute(getInput())));
return "reports/salaryreport";

我希望浏览器自动解码这些编码字符并显示原始输入,而它总是在输入字段中显示修改/编码的值。

是我做错了什么,还是我的预期不正确?

先谢谢了。

【问题讨论】:

  • 如果您提供输入/输出示例以及您实际期望发生的情况,则更容易回答!
  • 我在 JSP 中有一个输入字段,我提供输入 "NZIC123 !"#$^?%",这将传递给控制器​​中的控制器,我正在对其进行编码,然后通过将它添加到模型中,在输入字段的前端现在我得到“NZIC123 !#$^?%”。我印象深刻该浏览器会自动解码它,我会得到“NZIC123!”#$^?%”,但看起来我的假设是错误的
  • 这听起来像是一个愚蠢的问题,但是是什么让它对浏览器产生影响呢?我已经看到当一个值以某种方式被双重编码时会发生这种情况。
  • 我同意,这是一个愚蠢的问题和假设,我在控制器中使用 ESAPI encodeHTMLAttribute 编码并希望浏览器自动解码
  • 所以这不是一个愚蠢的问题。我刚刚在一个简单的 HTML 页面上使用了您的输出,NZIC123 !"#$^?% 在 chrome、firefox、Edge 和 IE11 中正确呈现。您的 Web 框架中的某些内容正在添加额外的编码层。从浏览器的开发人员工具或视图->源中获取有问题的数据值。

标签: java spring-mvc xss esapi


【解决方案1】:

您正在将 ESAPI 编码的值传递给某种 Web 框架。

我的钱是浏览器收到了相当于NZIC123 !"#$^?% 的信息,这就是您出现这种行为的原因。

我在 Edge、IE11、Chrome 75 和 Firefox 上测试了 NZIC123 !"#$^?%。它在所有 4 个实例中都正确呈现。

调用model.addAttribute() 可能已经在提供属性编码,而您得到的行为是因为它正在对ESAPI 提供的& 符号进行编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多