gpt4 book ai didi

java - org.owasp.esapi.Encoder.encodeForHTML 和 org.owasp.esapi.Encoder.encodeForJavaScript 方法之间有什么区别

转载 作者:行者123 更新时间:2023-12-01 16:26:05 26 4
gpt4 key购买 nike

我知道,我们可以使用encodeForHTML来处理HTMl,使用encodeForJavascript来处理javaScript。我的代码中有一个跨站点脚本:“Reflected fortify scan Problem”

String errorDesc = HttpServletRequest.getParameter("error_description");

我必须使用编码器来验证这一点,但我很困惑应该在它们之间使用哪一个。由于我们不知道 HttpServletRequest.getParameter 的返回类型。

1.  org.owasp.esapi.Encoder.encodeForHTML
2. org.owasp.esapi.Encoder.encodeForJavaScript

最佳答案

亲爱的提问者,我们对输出编码之间的差异有一个相当常见的误解——这是您在查看编码器调用时所使用的内容,而输入验证是一个完全独立的操作,它具有与 Encoder 关系不大类(class)。

Encoder您在这里处理的方法仅在向用户呈现数据时使用,并且仅用于正确的上下文。例如,如果应用程序是“单页应用程序”(SPA),那么您很可能只想确保输出针对 JavaScript 进行编码,因为面向客户端的框架几乎肯定是 JavaScript。

如果您使用的是较旧风格的应用程序,那么只要您要将数据放置在 <some_tag> data </some_tag> 之间,您就可以对 HTML 进行编码。 。

XSS 要求您了解应用程序中每个变量的一件事:它的数据流,从生成值时开始(服务器、用户、数据库等)并了解所有转换它可能会在遍历到用户并返回到系统时发生。如果该值在浏览器中启动,它将进入后端的某种 Controller ,在处理该值之前,您将对其进行白名单验证 - ESAPI 有一个 validator 类 - 然后如果它通过验证,您将确保数据库仅将其视为数据(PreparedStatement,或通过使用 ORM 框架的实用程序。)最佳实践是

  1. 规范化数据
  2. 根据规范化值进行验证
  3. 如果有效,则丢弃规范化值并存储原始数据

如果使用得当,Validator默认类可以帮助您执行此操作。

您在此问题中询问的方法适用于将用户输入发送回浏览器的情况,无论是从数据库还是从 session 中尚未保留的先前请求。

关于java - org.owasp.esapi.Encoder.encodeForHTML 和 org.owasp.esapi.Encoder.encodeForJavaScript 方法之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62144738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com