XSS攻击原理解析
XSS全称CrossSiteScript,跨站脚本攻击
它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
主要途径
1、对普通的用户输入,页面原样内容输出,(用户的输入包括cookie输入)
如链接:http://www.ingchat.com/projdemo/xss/input.html?name=<script>alert(3);</script>
页面上如果拿到name参数,直接div.innerHTML=name;则alert(3)执行,若将其修改为获取用户cookie或者是转账等操作,则后果不堪设想
2、允许用户输入HTML标签
<imgsrc="javascript:alert('xss');"></img>
3、使用16进制来写(可以在傲游中运行)
<imgSTYLE=”background-image:/75/72/6c/28/6a/61/76/61/73/63/72/69/70/74/3a/61/6c/65/72/74/28/27/58/53/53/27/29/29″>
以上写法等于<imgSTYLE=”background-image:url(javascript:alert(‘XSS’))”>
解决办法:过滤输入和转义输出
1、对提交的内容进行验证,url、查询关键字、http头、post数据
2、输出方面,对用户输入进行严格控制
3、在脚本执行时,应绝无用户输入(应使用server端校验过的安全内容)
一些工具
1.插入HTML的文本
需要将&<>'"等符号更新为&,<...等否则有可能被嵌入<script>脚本并执行。
function encodeParam(param) { return param.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, """).replace(/"/g, "'"); }
2.插入HTML标签属性(如src等)
function encodeAttr(attr) { return attr.replace(/[&'"<>\/\\\-\x00-\x09\x0b-\x0c\x1f\x80-\xff]/g, function(r) { return "&#" + r.charCodeAt(0) + ";" }).replace(/\r\n/g, "<BR>").replace(/\n/g, "<BR>").replace(/\r/g, "<BR>").replace(/ /g, " "); }
3.插入HTML内容(innerHTML)
function encodeHtml(html){ return html.replace(/[&'"<>\/\\\-\x00-\x1f\x80-\xff]/g, function(r) { return "&#" + r.charCodeAt(0) + ";" }); }
参考:
XSS漏洞攻击原理与解决办法
XSS跨站脚本攻击原理
各种xss方式
处理方法参考:
跨站脚本攻击(XSS)的原理、防范和处理方法