困扰了一个晚上的csrf问题

昨天晚上偶然看到csrf这个问题,因此就去了解了一下csrf究竟是个什么东西。
百度定义:html

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,一般缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS很是不一样,XSS利用站点内的信任用户,而CSRF则经过假装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性

一个简单的例子:浏览器

某网上商城获取一个订单详情的接口是127.0.0.1/orders/orderId,而且须要认证事后才能访问这个接口
口。小明是这个商城的一个用户,已经经过了认证,而且是经过cookie实现认证的。如今一个黑客也想要访问小
明在商城中某个订单的详情,他该怎么作呢?很简单,只要在某个地方发布一个连接地址是 
127.0.0.1/orders/orderId这个接口,诱使小明去点击这个连接发送请求。浏览器就会自动在这个请求上加上
以前认证过的cookie,而服务端是经过这个cookie验证是否本人操做的,这样黑客就在小明彻底不知情的状况下 
 就获得了这个订单的详情。这个接口的操做若是是 购买一个商品,删除邮件的话,后果将很是可怕。

为何会出现上面这种状况呢?安全

由于cookie是在向这个网页发送请求时自动携带的,而我昨天困扰的问题就是为何token会比cookie安全。        
缘由其实就是token通常存在sessionStorage或localStorage中,而它不能在本站点以外的其余站点获取 
到,因此就算你在别处点击了一个包含这个接口的连接也不会致使token泄露。

如何防范csrf攻击?
1.尽可能使用POST,限制GETcookie

post相对get来讲更安全,可是仍是能在连接中嵌套一个表单而后提交

2.设置浏览器cookie策略session

禁止在第三方网站上使用cookie

3.加验证码xss

每次发送重要请求都经过验证码和服务端进行认证,这也很是安全,可是用户体验很差,重要的操做能够这也,但你不能关注一个用户或者发布一个帖子也须要认证一次吧。

4.增长referer请求头检查post

referer请求头的值就是请求来源的地方,服务端能够经过判断这个来源去分辨是否时csrf攻击,可是一些黑客仍是能经过一些技术很容易的去更改这个请求头的值

5.使用token网站

这是最广泛的方法,每次发送请求都携带这个token,它与cookie不一样的是,token能够是无状态的,即服务端能够不用保存关于token的值,而是每次经过计算验证这个token来判断是不是当前用户。

黑客还有没有其余方法能获取到小明订单的详情?code

是能够的。黑客能够在商城一个商品的评价下面写入一个js脚本而且经过图片假装起来,只要小明查看了这个评价,这个js脚本就会自动加载,黑客就能够经过这个js脚本去获取token值而且发送请求,由于当前js脚本是在本站内执行的,因此是能够访问到token。上面这个攻击方式就是xss,经过在用户访问的页面嵌入js代码使用户或服务端受到攻击。

其实xss就是csrf的一种实现方式,xss的防范比较困难,由于黑客能够经过不少方法在网页中插入js或html代码。能够经过在cookie中设置了HttpOnly属性,那么经过js脚本将没法读取到cookie信息,这样能有效的防止XSS攻击。而关于xss防范又是另外一个话题了.....csrf

能够简单理解为csrf是让用户在不知情的状况,冒用其身份发起了一个请求,而xxs就是经过在网页上插入js或html代码发动攻击

写的比较乱,就是token和cookie这里没有理解透致使这么久才搞懂这个问题。

相关文章
相关标签/搜索