GWT SafeHTML、XSS 和最佳实践

2024-05-05

OWASP 的优秀人员强调,您必须对 HTML 文档中要放入不受信任数据的部分(正文、属性、JavaScript、CSS 或 URL)使用转义语法。看OWASP - XSS https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet。他们的 API(由 ESAPI 团队开发)随后满足了这种需求,为每个上下文提供了编码器:

ESAPI.encoder().encodeForHTML("input"); ESAPI.encoder().encodeForHTMLAttribute("input"); ESAPI.encoder().encodeForJavaScript("input"); ESAPI.encoder().encodeForCSS("input"); ESAPI.encoder().encodeForURL("input");

随后,这使得开发商能够满足基于 DOM 的 XSS https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet.

所以我的问题是 GWT 的 safehtml 包如何满足这个需求,还是仅仅专注于 HTML 编码?


SafeHtmlTemplates http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safehtml/client/SafeHtmlTemplates.html会这样做(但仅限客户端,因为它依赖于 GWT 生成器)。它将使用“tag soup”解析器解析 HTML 片段,该解析器将推断上下文,如果参数不能在此上下文中使用,则记录警告或抛出异常(例如,它阻止在脚本上下文中使用所有占位符) 。但这仍然在不断变化(SafeUri仍在审查中并且SafeStyles http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safecss/shared/SafeStyles.html仍然受到严格限制),但它会在适当的时候出现(我认为应该在 GWT 2.4 中)。

否则:

  • SafeHtmlUtils http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safehtml/shared/SafeHtmlUtils.html的将逃脱所有<, >, &, ' and "因此结果对于“HTML”和“HTML 属性”上下文是安全的
  • SafeHtmlBuilder的各种追加方法只会调用SafeHtmlUtils在引擎盖下
  • UriUtils http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safehtml/shared/UriUtils.html提供工具来清除不安全的 URI(您仍然需要SafeHtmlUtils如果您正在构建 HTML 字符串,则通过或等效的内容 - 与直接使用图像源或锚点的 href 的值–)。
  • SafeStyles本身没有提供任何具体内容,但是SafeHtmlTemplates只允许它出现在 CSS 上下文的开头,并且如果您尝试在 CSS 上下文中放入其他内容,则会记录一条警告。SafeStylesBuilder预计将延长类型安全方法,帮助构建格式良好的 CSS.
  • 我一直在工作 http://gwt-code-reviews.appspot.com/1380806/ on a SafeUri界面,类似于SafeStyles但在 URL 上下文中。在限定时间内,SafeHtmlTemplates只会允许SafeUri or a String as the 全部价值URL 属性,传递String通过UriUtils以确保其安全。

简而言之,我认为你的问题的答案是:是的,GWT 的 safehtml 包可以满足这个需求;但您可能必须始终使用最新版本的 GWT(至少在来年)safe.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GWT SafeHTML、XSS 和最佳实践 的相关文章

随机推荐

  • java中的简单超时

    谁能指导我如何在java中使用简单的超时 基本上在我的项目中我正在执行一条语句br readLine 它正在读取调制解调器的响应 但有时调制解调器没有响应 为此 我想添加一个超时 我正在寻找类似的代码 try String s br rea
  • 图像增强 - 从书写中清除给定图像

    我需要清理这张照片 删除 清理我 的字样并使其变亮 作为图像处理课程作业的一部分 我可能会使用 matlab 函数 ginput 来查找图像中的特定点 当然 在脚本中您应该对所需的坐标进行硬编码 您可以使用 conv2 fft2 ifft2
  • 无法执行 script.sh:未知错误

    我想使用 DTrace 来查看 我的 shell 脚本进行了哪些系统调用 我做了一个非常简单的shell脚本 shell sh 并赋予它执行权限 bin bash grep 1 lt lt lt 123 I cd进入其目录 并运行这个简单的
  • BigInteger 没有自动装箱吗?

    在修复代码时这个问题 https stackoverflow com q 30938610 4271479 我意识到自动装箱并不适用于所有类型 此代码编译 Integer y 3 但做同样的事情BigInteger不编译 BigIntege
  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th
  • 如何使用UIPageViewController跳转到特定页面?

    我正在使用 Xcode 8 的默认基于页面的应用程序 并且我一直在尝试跳转到特定页面 而不是左右滑动来转动 我在 StackOverflow 上发现了类似的问题 但答案大多建议使用这种方法 setViewControllers direct
  • 如何在 SQLite 中返回多行插入的 id?

    给定一个表 CREATE TABLE Foo Id INTEGER PRIMARY KEY AUTOINCREMENT Name TEXT 如何使用以下命令返回同时插入的多行的 id INSERT INTO Foo Name VALUES
  • 使用准备好的语句设置表名称

    我正在尝试使用准备好的语句来设置表名以从中选择数据 但在执行查询时不断收到错误 错误和示例代码如下所示 Microsoft ODBC Microsoft Access Driver Parameter Pa RaM000 specified
  • 如何在C#中模拟鼠标点击?

    如何在 C winforms 应用程序中模拟鼠标点击 我结合了多个来源来生成我当前正在使用的下面的代码 我还删除了 Windows Forms 引用 以便我可以从控制台和 WPF 应用程序使用它 而无需其他引用 using System u
  • 是否有可能在每个训练步骤中获得目标函数值?

    在通常的 TensorFlow 训练循环中 例如 train op tf train AdamOptimizer minimize cross entropy with tf Session as sess for i in range n
  • Azure Webjob 与云服务

    WebJob 和云服务有什么区别 我试图对两者进行概述 根据定义 它们似乎能够实现相同的目标 也许云服务有更多功能 云服务 Web Worker Role 将为您提供完整的虚拟机 VM 由于您想将 WebJobs 与云服务进行比较 我假设您
  • CUDD C++ 接口,用于将布尔值转换为 BDD 以及生成的最小项集(到割集)

    我正在与 https github com ivmai cudd https github com ivmai cudd 目标是进行以下重复过程 1 输入 连贯 非递减 布尔函数表达式 顶部 a 1a 2a 3 x 1x 2x 3 z 1z
  • 节点需要导入语句的文件扩展名

    我一直在构建一个打字稿应用程序 其中我从文件中导入了一些常量 VS Code 的自动导入为我完成了这项工作 但是当我编译并运行该文件时 它抛出了一个错误 因为它找不到该模块 似乎错误来自于导入语句没有文件扩展名 但它只出现在编译的 java
  • SSIS ODBC SQL 参数

    我在 odbc 源数据流任务中有一个 SQL 命令需要采用参数 但不存在添加参数的选项 我尝试将数据库添加为与 ODBC 提供程序的 ADO NET 连接 但也没有可用的参数 还尝试将其作为 OLEDB 连接 但没有可用于 ODBC 的提供
  • 如何从 Visual Studio 2013 将现有解决方案添加到 GitHub

    我浏览了许多关于 VS 2013 中新的 Git 集成的网页 它们不涉及向 Github 添加现有解决方案 事实上 我找不到太多关于使用 GitHub 而不是 Visual Studio Online 的信息 谁能告诉我如何从现有解决方案开
  • 仅当内容超过两行时显示只读/隐藏按钮

    我正在创建一个评论部分 类似于 youtube 的东西 并且我希望能够在 content 有多行时显示阅读更多 隐藏按钮 这就是我到目前为止所做的 我的阅读更多 隐藏按钮可以工作 因为我添加了一个计算的线夹 使内容仅在存在多行时才显示两行
  • 在 VBA 中接收文件创建通知,无需轮询

    我正在编写一个与 ScanSnap 扫描仪集成的程序 ScanSnap 扫描仪不支持 TWAIN 扫描文档后 它会自动保存为 PDF 我想监视保存文件的目录 并在文件出现 并完成写入 时采取一些操作 一种简单的方法是使用 MS Access
  • 需要密码才能卸载/删除应用程序

    我想要求用户在被允许卸载 删除我的应用程序之前输入密码 我怎样才能实现这个功能 你可以通过以下方式做到这一点 第一次安装应用程序时 请安装单独的应用程序 包 观察程序 watcher 包含的唯一类是一个监听的 BroadcastReceiv
  • React Native 中未捕获的引用错误?

    我在 React Native 中遇到了未捕获的引用错误 为什么会这样 我能够成功构建 但捆绑程序显示此错误 我该如何解决它 注意 我使用的是Windows 10 截屏 包 json name rchampz version 0 0 1 p
  • GWT SafeHTML、XSS 和最佳实践

    OWASP 的优秀人员强调 您必须对 HTML 文档中要放入不受信任数据的部分 正文 属性 JavaScript CSS 或 URL 使用转义语法 看OWASP XSS https www owasp org index php XSS 2