我在 mXSS 上找不到任何好的文档或任何内容。任何人都可以提供一些信息或提供链接吗?
我找到了一个视频和视频演示文稿的 PDF:
http://www.youtube.com/watch?v=Haum9UpIQzU
https://hackinparis.com/data/slides/2013/slidesmarioheiderich.pdf
我在 mXSS 上找不到任何好的文档或任何内容。任何人都可以提供一些信息或提供链接吗?
我找到了一个视频和视频演示文稿的 PDF:
http://www.youtube.com/watch?v=Haum9UpIQzU
https://hackinparis.com/data/slides/2013/slidesmarioheiderich.pdf
mXSS 是 Mario Heiderich 提出的一种新型 XSS 攻击。我实际上看到他在今年的 Syscan 2013 上发表了这个演讲。
有问题的漏洞来自允许直接操作 HTML 内容的innerHTML,绕过DOM。一个元素 innerHTML 是非幂等的。浏览器通过处理内容来修复和优化 HTML 错误。这在幻灯片中给出的示例中非常明显。这种操作的问题在于,它有时会引入乍一看并不明显的缺陷。幻灯片中也有一个很好的例子。
这种攻击的重要之处在于它绕过了大多数现有的 XSS 过滤器和清理程序(在谈话时,情况可能现在更好)。
据我所知,除了演示幻灯片中的任何信息外,没有任何其他关于此类 XSS 攻击的可用信息。
这是一个古老的帖子,但有些评论询问是否有任何辩护。
这是论文的摘录:
此时字符串仍然是无害的,不能用于执行 XSS 攻击。但是,一旦使用该
innerHTML
属性将该字符串插入浏览器的 DOM 中,浏览器就会改变该字符串。这种突变是高度不可预测的,因为它不是指定innerHTML
处理的一部分,而是在每个主要浏览器系列中以不同方式实现的 HTML 代码的专有优化。变异的字符串现在包含一个有效的 XSS 向量,攻击将在渲染新的 DOM 元素时执行。服务器和客户端过滤器都无法检测到这种攻击,因为在这些过滤器中扫描的字符串不包含任何可执行代码。
这个漏洞利用实际上是一个基于浏览器的漏洞利用。在 angularjs 和 jquery 等相当动态的框架的世界中innerHTML
,即使在 2012 年至 2013 年首次描述这种攻击时,也有相当多的事情发生在幕后。
作者接着说:
如果
innerHTML
仅用于将来自 web 应用程序本身的可信代码插入 DOM,则它不会受到攻击。
所以回答“我们能做些什么吗?” is:不要innerHTML
与用户输入结合使用。
但是等等......如果我的应用程序有数千次调用innerHTML
或者我们使用 jquery 怎么办?该论文讨论了他们提供的称为“TrueHTML”的脚本。在查找示例代码时,我能找到的最好的代码是在这里,您可以在其中覆盖客户端对 的使用innerHTML
,绕过原始攻击中讨论的功能......并且只需添加一个脚本文件即可。该论文还讨论了最小的性能损失。
(我不能 100% 确定我使用的代码清单是否应该被信任——不是我写的,复制粘贴需要您自担风险!也就是说,它似乎使用了论文中描述的技术。)我不确定“isExploitable”检查是否返回正确的值。
以下是提供的 github 提交的摘录:
mitigateMXSS: function (element) {
+ var that = this;
+ if (typeof element.innerHTML === 'string') {
+ Object.defineProperty(element, 'innerHTML', {
+ get: function () { return that.changeInnerHtmlHandler(this, 'innerHTML') },
+ set: function (html) {
+ while (this.firstChild) {
+ this.removeChild(this.lastChild);
+ }
+ this.insertAdjacentHTML('afterBegin', html);
+ }
+ });
+ }
+ },