org.owasp.esapi.Encoder.encodeForHTML和org.owasp.esapi.Encoder.encodeForJavaScript方法的区别是什么?

问题描述 投票:0回答:1

我知道,我们可以用encodeForHTML来处理HTMl,用encodeForJavascript来处理javaScript.有一个跨站脚本。在我的代码中,有一个 "Reflected fortify扫描问题"。

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

我必须使用Encoder来验证,但我很困惑,我应该在它们之间使用哪一个。因为我们不知道HttpServletRequest.getParameter的返回类型。

1.  org.owasp.esapi.Encoder.encodeForHTML
2.  org.owasp.esapi.Encoder.encodeForJavaScript
java security owasp encoder esapi
1个回答
0
投票

亲爱的提问者,我们在这里有一个相当普遍的误解,就是对输出编码和输入验证之间的区别--当你看到Encoder调用时,这就是你正在处理的东西,而输入验证是一个完全独立的操作,它与 Encoder 类。

Encoder 你在这里处理的方法只有在你向用户展示数据的时候才会使用,而且只能用于正确的上下文。 例如,如果应用程序是 "单页应用程序"(SPA),那么很可能你只是想确保输出是为JavaScript编码的,因为面向客户端的框架几乎肯定是JavaScript。

如果你使用的是旧式的应用程序,那么你会在任何时候为HTML编码,你将把数据放置在你的应用程序之间。<some_tag> data </some_tag>.

XSS需要你明白一件事,对于 每一 在你的应用程序中的变量。 它的数据流,从值产生的时候(服务器,用户,DB等),了解它在传递给用户和回到系统时可能经历的所有转换。 如果值是从浏览器开始的,它将进入后端的某种Controller,在你处理这个值之前,你将对它进行白名单验证--ESAPI有一个验证器类--然后如果它通过了验证,你将确保数据库只将它作为数据处理(PreparedStatement,或者通过使用ORM框架的实用程序。

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

如果使用得当, Validator 类是默认的,以帮助你做到这一点。

你在这个问题中问到的方法是针对用户输入被送回浏览器的情况,无论是从数据库还是从你的会话中尚未被持久化的先前请求。

© www.soinside.com 2019 - 2024. All rights reserved.