繁体   English   中英

b/w org.owasp.esapi.Encoder.encodeForHTML 和 org.owasp.esapi.Encoder.encodeForJavaScript 方法有什么区别

[英]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 框架的实用程序。)最佳实践是

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

如果使用得当, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM