跨站脚本(CrossSiteScripting),简称XSS。恶意攻击者在网页中插入恶意的javaScript代码,当用户浏览页面时,网页中嵌入的javaScript代码就会被执行,从而达到恶意攻击用户的目的。一个简单的XSS攻击代码:asyncfunction(ctx,next){ctx.set('X-XSS-Protection',0);ctx.render('index',{from:ctx.query.from});};注意:插入X-XSS-Protection标头会禁用浏览器XSS阻止程序。开始攻击:大家发现网页执行了一个脚本,这个脚本是用户恶意输入的。这是最简单的XSS攻击案例。在本该显示纯文本的地方,执行了黑客编写的脚本。那么XSS攻击有什么危害呢?1.窃取各种用户帐户。2.控制企业数据,包括读取、篡改、添加和删除敏感企业数据的能力。、网站挂马7、控制受害者机器攻击其他网站XSS攻击的分类1、反射型又称非持久性跨站脚本攻击。该漏洞的出现是因为攻击者注入的数据反映在响应中。非持久性XSS攻击要求用户访问被攻击者篡改的链接。当用户访问链接时,植入的攻击脚本被用户的浏览器执行,从而达到攻击的目的。也就是我上面提到的简单的XSS攻击案例,直接通过url参数注入。然后响应数据中包含危险代码。当黑客向您发送此链接时,您就被骗了!2、存储型也叫持久化跨站脚本。一般发生在XSS攻击向量(泛指XSS攻击代码)存储在网站数据库中,并在用户打开页面时执行。持久性XSS攻击比非持久性XSS攻击危害更大,并且容易引起蠕虫,因为每次用户打开页面并查看内容时都会自动执行脚本。网页有发表评论的功能,评论会写入后台数据库,访问首页时会从数据库中加载所有评论。当我添加评论隐藏脚本时,如下图:别人访问首页时,刚才黑客写的评论里的脚本被浏览器当作代码执行,莫名其妙地攻击用户:以上是XSS攻击的两种基本类型。黑客当然不会弹框告诉你你被攻击了,黑客也不会那么傻~他可以在用户不知情的情况下窃取用户的cookie,更改网页的业务逻辑等等。XSS攻击的注入点1.HTML节点内容这其实就是我之前演示的,攻击脚本隐藏在HTML节点中。2、HTML属性这里img的src属性是用户传递的值。当用户将图片地址写入为:1"%20onerror="alert(%27hahawasattacked%27)时,我们看看下面会发生什么:3.JavaScript代码(字符串提前关闭)当JavaScript代码中有一个变量是是用户提供的数据,这个数据可能之前已经写入数据库。如下图,当用户输入的内容为:小鱼子“;alert(%27哈哈你被攻击了!%27);”4、富文本其实就是众所周知的一段HTML。由于是一段HTML,所以存在XSS攻击。而且富文本攻击的防御也比较麻烦。XSS攻击防御chrome浏览器自带防御,可以拦截反射型XSS(HTML内容和属性),js和富文本无法拦截,所以我们要自己做一些防御方法。1、HTML节点内容防御对用户输入的内容进行转义:varescapeHtml=function(str){str=str.replace(/g,'>');returnstr;}ctx.render('index',{comments,from:escapeHtml(ctx.query.from||'')});2、HTML属性防御空格、单引号、双引号转义varescapeHtmlProperty=function(str){if(!str)return'';str=str.replace(/"/g,'&quto;');str=str.replace(/'/g,''');str=str.replace(//g,'');returnstr;}ctx.render('index',{posts,comments,from:ctx.query.from||'',avatarId:escapeHtmlProperty(ctx.query.avatarId||'')});3.JavaScript防御转义引号varescapeForJS=function(str){if(!str)return'';str=str.replace(/\\/g,'\\\\');str=str.replace(/"/g,'\\"');returnstr;}4.富文本防御文本的情况很复杂,js可以隐藏在标签中,超链接url中,任意属性中。
