【问题标题】:DOM based XSS protection in JS appJS 应用中基于 DOM 的 XSS 保护
【发布时间】:2016-05-10 22:04:14
【问题描述】:

我对基于 dom 的 XSS 攻击感到非常困惑。我只想保护任何服务器检索到的数据被输出到我的 JS 应用程序中的 dom(使用 innerHTML)。转义 HTML 实体或转义安全属性的引号等。然后我读到了基于 dom 的 XSS,但我真的不知道它与转义 HTMl 有什么不同。 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#XSS_Prevention_Rules_Summary

在这张表中,你可以看到一个基于 dom 的 XSS 示例:

<script>document.write("UNTRUSTED INPUT: " + document.location.hash);<script/>

并且文章建议您必须应用本文中描述的技术:https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

如果我错了,请纠正我,但这个示例应该使用简单的 html 实体转义来完全保护。

<script>document.write("UNTRUSTED INPUT: " + escapeHTML(document.location.hash));<script/>

其中 escapeHTML 编码 html 实体。

我不知道第二篇文章是关于什么的, 符号是什么? (谷歌不可能)它是某种服务器端语言吗?逃避 JS 服务器端是有意义的,那么本文中的什么是给生成 javascript 服务器端的人的提示?因为这篇文章对我来说完全没有意义,如果只是针对静态文件中的普通 JS 的话。

更新:我只想知道转义 HTML 是否是我使用 innerHTML 方法动态插入 DOM 时唯一需要做的事情。当然,我知道 url 和样式需要特别注意,如我链接的第一篇文章中所述。

【问题讨论】:

  • 我不确定整个问题的答案,但 看起来像 ASP
  • 听起来你应该可以很好地提供 HTML 服务。基于 DOM 的攻击与内核的 D​​OM 攻击向量有关。因此,您只需在备份数据时担心它们。

标签: javascript html dom xss


【解决方案1】:

攻击可能来自服务器或 DOM。存储型 XSS 攻击和反射型 XSS 攻击来自服务器,当有人将他们的错误代码放到您的数据库或服务器上执行时,就会发生这种攻击。简而言之,防止不良代码进入服务器的方法是保护数据传输方法(输入、按钮、表单、url、查询字符串)。 Stored and Reflected XSS Attacks

DOM based XSS 攻击关注范围更广。 DOM 内置的唯一安全性是 Same-Origin-Policy。它说如果代码是从同一个域触发的,那么“它必须是安全的”。问题在于 HTML 的限制非常松散,一个页面上可以接受的上下文太多,可以相互交叉和影响。您可以在脚本标签中编写 JavaScript,并在随后触发的输入字段中调整它们的速度。 JavaScript 可以访问可用于重定向点击事件的页面 URL 上下文。这只是一些。

如果您真的想保护您的站点服务器端和 DOM,那么如果可能的话,我会研究 CSP (Content Security Policy)。这是额外的工作,但如果你真的想把事情锁起来,那是值得的。

最后,您询问的&lt;%= =&gt; 用于displaying information from ASP.NET

【讨论】:

  • &lt;%= %&gt; 不仅是 .NET,而且在许多不同的语言中都很常见。另一个例子是 underscore.js,我认为甚至一些 java 框架也使用这种语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多