JS应用程序中基于DOM的XSS保护

DOM based XSS protection in JS app

本文关键字:XSS 保护 DOM 应用程序 JS      更新时间:2023-09-26

我真的很困惑基于dom的XSS攻击。我只想保护任何服务器检索到的数据输出到JS应用程序中的dom(使用innerHTML)。转义HTML实体或为安全属性转义引号等等。然后我读到了基于dom的XSS,我真的不知道它与转义HTM1有什么不同。https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_事件_备忘单#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服务器端是有意义的,那么本文中的提示是什么?因为这篇文章对我来说根本没有意义,如果它只是针对静态文件中的普通JS。

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

攻击可能来自服务器或DOM。存储XSS攻击和反射XSS攻击来自服务器,当有人将他们的坏代码拿到你的数据库或服务器上执行时就会发生。简而言之,防止坏代码进入服务器的方法是保护数据传输方法(输入、按钮、表单、URL、查询字符串)。存储和反射XSS攻击

基于DOM的XSS攻击更为广泛。DOM内置的唯一安全性是同源策略。它说,如果代码是从同一个域触发的,那么"它必须是安全的"。问题是HTML的限制非常宽松,一个页面上接受的上下文太多,可能会相互交叉并影响。您可以在脚本标记中编写JavaScript,并在随后触发的输入字段中对其进行调整。JavaScript可以访问页面URL上下文,该上下文可用于重定向单击事件。这只是几个。

如果我你真的想保护你的网站服务器端和DOM,那么如果可能的话,我会研究CSP(内容安全策略)。这是额外的工作,但如果你真的想把东西锁起来,那就值得了。

最后,您询问的<%= =>用于显示来自ASP.NET的信息。