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

标签 java security owasp encoder esapi

我知道,我们可以使用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/

相关文章:

javascript - 日期的正则表达式 无效的正则表达式

java - 如何覆盖现有属性的@AdminPresentation [Broadleaf Commerce]

javascript - 选择一种在 ASP.NET 中转义 JavaScript 的方法

java - 在不使 DOS 攻击更容易的情况下,在 Spring Security AuthenticationProvider 中添加人为延迟

apache - 防止 DDoS 攻击 : Is Mod_Security and the OWASP rule set adequate?

javascript - 如何验证使用随机盐散列的密码?

java - 在同一数据库上运行的不同线程中的多个游标

java - 如何确保该方法仅从一个线程执行一次?

ios - 在 iPhone 应用程序中安全存储 Web API 凭据的位置?

ruby-on-rails - 允许在 Ruby/Rails 应用程序中使用用户定义的脚本