mutation xss(mXSS)成因

这种骚操作之前只在Google search搜索框的那个xss里见到过...直到昨天.....

这里不谈具体的case只想说一下我的理解

首先浏览器的parser在不同标签的上下文中行为并不一致 ​

​svg上下文中 style标签中的内容被视为子元素

​<svg><style><a id="</style><evil>"></a></style> 这里style才闭合</svg> 

​ ​普通html上下文中 style标签中的内容被视为纯文本

<style><a id="</style>这里就闭合了 <evil>成功从a的属性里逃逸出来 "></a></style>  

​ ​script中的上下文和普通的html也不同 ​

​以上并不是漏洞所在...只是同一段语言在不同上下文(语法)中拥有不同的语义

​真正的漏洞成因是sanitizer解析时的语法与浏览器最终生成dom时使用的语法不一致(常常是由于浏览器的自动补全,比如sanitizer跑在服务器端根本没有自动补全,又或者第一次自动补全之后还会进行第二次的自动补全)。后果就是sanitizer看到的东西和最终输出到dom里的东西在语法结构上不一致(突变),结合前面的case在最终的语义上就不同了...

在某些限制没那么严格的case里,并不需要用到上述语义二义性的vector,仅仅利用浏览器的自动补全改变用户输入的上下文就可以绕过sanitizer了,我不知道这种的算不算mxss,也许...? ​

点击右边的按钮加载评论,如果无法加载那估计是被墙啦..你看着办w