DOM XSS 是基于文档对象模型的XSS。一般有如下DOM操作:
-
使用document.write直接输出数据。
-
使用innerHTML直接输出数据。
-
使用location、location.href、location.replace、iframe.src、document.referer、window.name等这些。
比如如下demo:
假如对于变量url的值是:javascript:alert(‘dom-xss’); 类似这样的,那么就会收到xss的攻击了。因此对于DOM XSS主要是由于本地客户端获取的DOM数据在本地执行导致的。因此我们需要对HTML进行编码,对JS进行编码来防止这些问题产生。具体如何编码可以请看我下面的 XSS 如何防范那个地方即可。
我们接下来看看demo代码吧:
- 使用document.write直接输出导致浏览器解析恶意代码
代码如下:
页面渲染完成后,点击弹窗如下所示:
2. 使用innerHTML直接输出导致浏览器解析恶意代码
代码如下:
点击一样也会弹窗窗口的。也会一样执行xss攻击的。
- 使用location/location.href/location.replace/iframe.src 造成的XSS
如下代码:
刷新下页面,也会弹出窗口执行 xss攻击了。
=============================================================================
在服务器端设置cookie的时候设置 http-only, 这样就可以防止用户通过JS获取cookie。对cookie的读写或发送一般有如下字段进行设置:
-
http-only: 只允许http或https请求读取cookie、JS代码是无法读取cookie的(document.cookie会显示http-only的cookie项被自动过滤掉)。发送请求时自动发送cookie.
-
secure-only: 只允许https请求读取,发送请求时自动发送cookie。
-
host-only: 只允许主机域名与domain设置完成一致的网站才能访问该cookie。
=====================================================================================
目前该属性被所有的主流浏览器默认开启XSS保护。该参数是设置在响应头中目的是用来防范XSS攻击的。它有如下几种配置:
值有如下几种:默认为1.
-
0:禁用XSS保护。
-
1:启用XSS保护。
1;mode=block; 启用xss保护,并且在检查到XSS攻击是,停止渲染页面。
==============================================================================
我们为什么要防御HTM