资讯专栏INFORMATION COLUMN

困扰了一个晚上的csrf问题

cyrils / 2648人阅读

摘要:小明是这个商城的一个用户,已经通过了认证,并且是通过实现认证的。浏览器就会自动在这个请求上加上之前认证过的,而服务端是通过这个验证是否本人操作的,这样黑客就在小明完全不知情的情况下就得到了这个订单的详情。

昨天晚上偶然看到csrf这个问题,所以就去了解了一下csrf到底是个什么东西。
百度定义:

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,限制GET

post相对get来说更安全,但是还是能在链接中嵌套一个表单然后提交

2.设置浏览器cookie策略

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

3.加验证码

每次发送重要请求都通过验证码和服务端进行认证,这也非常安全,但是用户体验不好,重要的操作可以这也,但你不能关注一个用户或者发布一个帖子也需要认证一次吧。

4.增加referer请求头检查

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

5.使用token

这是最普遍的方法,每次发送请求都携带这个token,它与cookie不同的是,token可以是无状态的,即服务端可以不用保存关于token的值,而是每次通过计算验证这个token来判断是否是当前用户。

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

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103604.html

相关文章

  • 网站攻击中csrf和xss

    摘要:何方神圣中文名字是跨站请求伪造,做的事情就是在别的网站,以你的名义对你登陆认证过的网站搞事情。中文名字是跨站脚本,做的事情就是在有漏洞的网站,写个攻击,或者存个另类的数据到网站数据库,对使用网站的用户造成困扰,属于站内攻击。 CSRF、XSS何方神圣 CSRF(Cross-site request forgery) 中文名字是跨站请求伪造,做的事情就是在别的网站,以你的名义对你登陆认 ...

    Betta 评论0 收藏0
  • Cesar竞赛平台项目中期总结

    摘要:竞赛平台项目中期总结软件谢运帷我们小组的选题是大学生竞赛平台项目,经过我们需求分析,原型设计等等步骤,我们终于要开始着手实现这一个庞大的竞赛平台项目。 Cesar竞赛平台项目中期总结 软件51 谢运帷 2015013185 我们小组的选题是大学生竞赛平台项目,经过我们需求分析,原型设计等等步骤,我们终于要开始着手实现这一个庞大的竞赛平台项目。我们使用Django+mysql处理后端逻辑...

    rainyang 评论0 收藏0
  • nodejs执行js文件和命令行下输入区别

    摘要:这里有一个文件,内容是部署编译好的文件到上下面是该文件的内容在终端中执行该文件结果是同样,将上面的代码在命令行中单行下输入就能获得的值非这里的问题困扰了我两个晚上,后来发现是异步函数问题。 这里有一个nodejs文件,内容是部署编译好的sol文件到testrpc上 下面是该文件的内容: Web3 = require(web3); web3 = new Web3(new Web3.pro...

    孙淑建 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<