转化方法:
function encodeHTML (a) { return String(a) .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); };2.5 页面编码
页面编码设置:
脚本编码设置:
注意:要想JS即可在UTF-8中正常使用又可以在GBK中正常使用,可以对JS中所有包含中文的字符串做字符转义。
例子:
alert("网络错误"); //弹出网络错误 alert("\u7f51\u7edc\u9519\u8bef"); //弹出网络错误3. Payload的分类
现在可以认识Payload的了,我不得不说这里对Payload的分类可以很好的让你认识Payload。也帮助你更好的对应到执行点。
3.1 原子Payload
最低层级的Payload。
javascript代码片段
可在eval、setTimeout、setInterval中直接执行,也可通过HTML等构成高阶Payload
javascript:javascript伪协议
结构:javascript:+js代码。可以在a标签的href属性被点击和window.location.href赋值的时候执行。
DATA URI协议
DATA URI结构:data:, 。DATA URI数据在包含在iframe的src属性和object data属性中将会变成可执行的Payload.
字符串转义变种javascript代码片段
unicode或者Latin-1表示字符串。
eval("\u0061\u006C\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u002"); //可执行的JS3.2 纯HTMLPayload
这种Payload特点不具有可执行的JS,但是存在传播风险,可以把别的站点注入到被攻击网站。
包含链接跳转的HTML片段
主要是传播危害
<a href="http://ha.ck">哈哈,我来钓鱼了</a>3.3 包含原子Payload的HTML片段Payload
script标签片段
script标签片段这种Payload可以引入外部JS或者可直接执行的script。这种Payload一般不能通过直接复制给innerHTML执行,不过在IE上可以。不过通过document.write是可以执行。
例子:
// Payload原始值:data:text/html,<script>alert('xss');</script> var inputStr ="<script>alert('xss');<\/script>"; document.write(inputStr);包含事件处理的HTML片段
例如:包含img的onerror, svg的onload,input的onfocus等的HTML片段,都可以变成可执行的Payload。
var inputStr ="<img src=http://www.likecs.com/x onerror=alert('xss');>"; var inputStr ="<svg/onload=alert('xss')>"; var inputStr ="<input autofocus onfocus=alert('xss')>"; xssDom.innerHTML = inputStr;包含可执行JS属性的HTML片段
javascript伪协议
xssLink.setAttribute("href","javascript:alert('xss')")//点击可触发 var inputStr = "javascript:alert('xss')"; window.location.href = inputStr;DATA URI
例子:
// Payload原始值:data:text/html,<script>alert('xss');</script> //var inputStr = '<iframe src="http://www.likecs.com/data:text/html,<script>alert("xss");</script>"></iframe>'; // var inputStr = '<object data="data:text/html;base64,ZGF0YTp0ZXh0L2h0bWwsPHNjcmlwdD5hbGVydCgneHNzJyk7PC9zY3JpcHQ+"></object>'; xssDom.innerHTML = inputStr; //弹出alert("xss")这里只是介绍了主要的Payload,还有很多不常见的Payload。
第四部分:XSS攻击模型分析这部分我们根据漏洞攻击模型分析一下XSS的执行点和注入点。分析这两点其实就是找漏洞的过程。
1. XSS漏洞执行点
页面直出Dom
客户端跳转链接: location.href / location.replace() / location.assign()
取值写入页面:innerHTML、document.write及各种变种。这里主要会写入携带可执行Payload的HTML片段。
脚本动态执行:eval、setTimeout()、setInterval()
不安全属性设置:setAttribute。不安全属性前面见过:a标签的href、iframe的src、object的data
HTML5 postMessage来自不安全域名的数据。
有缺陷的第三方库。
2. XSS漏洞注入点
看看我们可以在哪些位置注入我们的Payload
服务端返回数据
用户输入的数据
链接参数:window.location对象三个属性href、search、search
客户端存储:cookie、localStorage、sessionStorage
跨域调用:postMessage数据、Referer、window.name
上面内容基本包含了所有的执行点和注入点。对大家进行XSS漏洞攻防很有帮助。
第五部分 XSS攻击防御策略1. 腾讯内部公共安全防御及应急响应
接入公共的DOM XSS防御JS
内部漏洞扫描系统扫描
腾讯安全应急响应中心:安全工作者可以通过这个平台提交腾讯相关的漏洞,并根据漏洞评级获得奖励。
重大故障应急响应制度。
2. 安全编码