![](/img/trans.png)
[英]org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException Error while invoking ESAPI.encoder()
[英]What is difference b/w org.owasp.esapi.Encoder.encodeForHTML and org.owasp.esapi.Encoder.encodeForJavaScript methods
我知道,我们可以对 HTMl 使用 encodeForHTML,对 javaScript 使用 encodeForJavascript。 我的代码中有一个跨站点脚本:“Reflected fortify scan problem”
String errorDesc = HttpServletRequest.getParameter("error_description");
我必须使用 Encoder 来验证这一点,但我很困惑我应该在它们之间使用哪一个。 因为我们不知道 HttpServletRequest.getParameter 的返回类型。
1. org.owasp.esapi.Encoder.encodeForHTML
2. org.owasp.esapi.Encoder.encodeForJavaScript
亲爱的提问者,我们在这里有一个相当普遍的误解,即 output 编码之间的差异 - 这是您在查看编码器调用时正在使用的内容,输入验证是一个完全独立的操作,几乎没有什么可做的使用Encoder
class。
您在此处处理的Encoder
方法仅在您向用户呈现数据时使用,并且仅用于正确的上下文。 例如,如果应用程序是“单页应用程序”(SPA),那么您很可能只想确保 output 被编码为 JavaScript,因为面向客户端的框架几乎肯定是 Z686155D805A60EDFFE61
如果您使用的是较旧样式的应用程序,那么只要您将数据放在<some_tag> data </some_tag>
之间,就可以为 HTML 进行编码。
XSS 要求您了解应用程序中每个变量的一件事:它的数据流,从生成值的时间开始(服务器、用户、数据库等),并了解它在遍历到用户时可能经历的所有转换和回到系统。 如果该值在浏览器中启动,它将在后端输入某种 Controller,在您处理该值之前,您将验证它的白名单——ESAPI 有一个验证器类——然后如果它通过验证,你将确保数据库仅将其视为数据(PreparedStatement,或通过使用 ORM 框架的实用程序。)最佳实践是
如果使用得当, Validator
class 默认会帮助您执行此操作。
您在此问题中询问的方法是用于将用户输入发送回浏览器的情况,无论是从数据库还是从尚未持久化的 session 中的先前请求。
主要区别在于 output 编码是如何完成的。 Encoder.encodeForHTML()
通过org.owasp.esapi.codecs.HTMLEntityCodec
class 执行 HTML 实体编码,而Encoder.encodeForJavaScript()
通过org.owasp.esapi.codecs.JavaScriptCodec
使用 JavaScript 的反斜杠编码。
您选择哪一个取决于您的“error_description”参数将如何在您的应用程序中呈现的上下文。 如果它在 HTML 标记之间呈现,请使用encodeForHTML()
,如果您在纯粹的 JavaScript 上下文中呈现它,请使用encodeForJavaScript()
。 请参阅https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html以获得对所有这些的更彻底的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.