2.3 四个重要的DOM属性
nodeName属性:规定节点的名称。
nodeName是只读的
元素节点的nodeName与标签名相同
属性节点的nodeName与属性名相同
文本节点的nodeName始终是#text
文档节点的nodeName始终是#document
nodeValue属性:规定节点的值。
元素节点的nodeValue是undefined或null
文本节点的nodeValue是文本本身
属性节点的nodeValue是属性值
nodeType属性:返回节点的类型。
nodeType是只读的。
innerHTML属性:获取元素内容,如:
即text的值为HelloWorld!
innerHTML可以被赋值,也可读,因此是被引用次数最多的对象属性,同时也是最容易产生安全问题的对象属性。
2.4 输入一般在哪里
Location对象属性
JS通常会通过调用DOM内置对象location来获得用户输入,如引用参数切分可使用location.search,引用完整URL可使用location.href等。
三.DOMbaseXSS
3.1两个典型的DOM过程
1)反射型DOMbaseXSS
2)存储型DOMbaseXSS
3.2 需要了解的知识点
比起常规XSS,DOMbaseXSS的漏洞发现过程更像是代码审计..
3.3 典型DOMbaseXSS实例
3.4 mxss
如果用户输入“出入”DOM两次以上,则有可能触发更高级别的DOMbaseXSS:mXSS
3.5 容易出现mXSS的场景
由于innerHTML会将HTML实体,CSS转义字符,ANSI编码等进行反转义,因此原来被转义之后认为安全的用户输入很有可能在绕过过滤器之后被反转回去。
四.过滤器绕过
4.1 先来几个栗子
常规XSS的过滤器绕过
4.2 过滤器绕过方法
一般意义上而言,DOMbaseXSS的首先要通过服务端的过滤器清洗一番,然后还要通过页面加载的各个JS脚本,绕过难度相对较大…
编码绕过:
我们要插入的代码:<imgsrc=“”onerror=alert(123)>
HTML5特性:
4.3XSS修复建议
不含有富文本编辑器(自定义样式)且没有使用DOM的站点:
输入:过滤双引号,单引号,左右尖括号,分号。
输出:对上述字符进行HTML实体编码即可。
不含有富文本编辑器(自定义样式)但使用DOM的站点:
输入:在DOM中转义双引号,单引号,左右尖括号,分号。
输出:在输出之前进行编码,如:innerHTML=encodeHTML(output)
含有富文本编辑器(自定义样式)但没有使用DOM的站点:
输入:过滤双引号,单引号,分号。
输出:对上述字符进行HTML实体编码即可。
含有富文本编辑器(自定义样式)且使用DOM的站点:
没办法…指哪儿修哪儿…