前端攻击(XSS和CSRF)

1.CSRF的基本概念、缩写、全称

  CSRF(Cross-site request forgery):跨站请求伪造

 

用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cookie

从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件:

  1.登录受信任网站A,并在本地生成cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录)

  2.在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)

举个例子:前段时间里,微博网站有个api接口有漏洞,导致很多用户的粉丝暴增。

CSRF的防范措施:

 方法一:token验证(用的最多)

  1.服务器发送给客户端一个token

  2.客户端提交的表单中带着这个token

  3.如果这个token不合法,那么服务器拒绝这个请求

 方法二:隐藏令牌

  把token隐藏在http的head中(方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别)

 方法三:Referer验证

  Referer指的是页面请求资源。意思是,只接受本站的请求,服务器才做响应,如果不是,就拦截

 

2.XSS的攻击原理

  XSS攻击的核心原理是:不需要你做任何的登录验证,它会通过合法的操作(比如在url中输入,在评论框中输入),向你的页面注入脚本(可能是js、html代码块)

最后导致的结果是:

  1.盗用cookie

  2.破坏页面的正常结构,插入广告等恶意内容

  3.D-doss攻击

XSS的防范措施:

  1.编码

    对用户输入的数据进行HTML Entity编码

    比如说这段代码:

<script>alert(1)</script>

    若不进行任何处理,则浏览器会执行alert的js操作,实现XSS注入

  2.过滤

    移除用户输入和事件相关的属性。如onerror可以自动触发攻击,还有onclick

    移除用户输入的style节点,script节点、iframe节点(尤其是script节点,它是可以支持跨域的,一定要移除)

  3.校正

    避免直接对HTML Entity进行编码

    使用Dom parse 转换,校正不配对的DOM标签

 

3.CSRF和XSS的区别

  区别一:

    CSRF:需要用户先登录网站A,获取cookie

    XSS:不需要登录

  区别二:

    CSRF:是利用网站A本身的漏洞,去请求网站A的api

    XSS:是向网站A注入js代码,然后执行JS里的代码,篡改网站A的内容

posted @ 2020-04-19 10:36  乔万泽  阅读(522)  评论(0编辑  收藏  举报