什么是 CSRF攻击?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是 CSRF攻击?相关的知识,希望对你有一定的参考价值。

,即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL(通常会用 POST 数据方式),从而达到改变服务器端数据的目的。这一类攻击依赖于你的网页中的表单,脆弱的表单很容易受到攻击。对于你网站中的访问者而言,可能会受到以下攻击:* 在你的网站之外记录受攻击者的日志(比如:Slashdot);* 修改受攻击者在你的网站的设置(比如:Google);* 修改你的硬件防火墙;* 使用受攻击者的登录信息在你的网站中发表评论或留言;* 将资金转移到另一个用户帐号中。CSRF 攻击的典型是那些使用 cookie 记录登录信息的网站,但对于一些允许某个 IP 地址访问的页面(如内部网),这一类攻击也会奏效。CSRF 攻击通常会使用到 javascript(但不仅限于 JavaScript)实现跨站点自动提交表单--表单数据可以隐藏,提交按钮可以伪装成链接或滚动条。* 确定那些接受可改变服务器数据的 CGI 只接受 POST 参数,不接受 GET 参数,一些服务器端语言默认同时接受两种方式提交过来的参数;* 确定表单提交处理的是你自己的表单,可以使用一个隐藏字段中存放MD5字符串,此字符串是将登录 cookie 数据与服务器端存放的密钥进行 MD5 之后的结果,只有这个 MD5 字符串正确时才接受表单数据;* 另外还可以增加一个更为严格的方法:在表单中增加一个时间戳的隐藏字段,并将其包含到 hash 字符串中,如果时间戳超过某个时间,则认为表单已过期。当表单过期时,给出一个方法可以让用户重新提交表单,比如将用户之前填写的数据依旧放入表单中,但使用一个新的 hash 字符串。一个php的表单例子,表单代码:<?php$key = y8s4Z7m2; //MD5加密密钥$time = time(); //当前时间$hash = md5($time.$key); //hash 字符串?<form method="post" action="comment.php"<pYour name: <input type="text" name="person_name" /</p<pComment: /<textarea name="comment" rows="10" cols="60"</textarea</p<input type="hidden" name="time" value="<?php echo $time; ?" /<input type="hidden" name="hash" value="<?php echo $hash; ?" /<p<input type="submit" name="comment" value="Submit Comment" /</p</form表单提交之后的 comment.php 后台处理程序代码:<?php$key = y8s4Z7m2; //密钥,与上面的一致$expire = 1800; //表单过期时间:半小时$my_hash = md5($_POST[time].$key); //正确的 hash 字符串if ($my_hash != $_POST[hash]) //hash 字符串不正确die(非法表单提交。);if (time() - $_POST[time] $expire) //表单已经过期,生成新的时间戳和 hash 字符串,显示表单让用户重新提交。(此处省略)//….//表单验证通过,可以接受表单提交的数据,并进行其它操作。//….? 参考技术A   一.CSRF是什么?
  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
  二.CSRF可以做什么?
  这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
  三.CSRF漏洞现状
  CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。
参考技术B CSRF攻击是什么?
CSRF攻击,全称为“Cross-site request forgery”,中文名为跨站请求伪造,也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。与XSS相比,CSRF更具危险性。
CSRF攻击的危害有哪些?
主要的危害来自于攻击者盗用用户身份,发送恶意请求。比如:模拟用户发送邮件,发消息,以及支付、转账等。
如何防御CSRF攻击?
1、重要数据交互采用POST进行接收,当然POST也不是万能的,伪造一个form表单即可破解。
2、使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。
3、出于用户体验考虑,网站不能给所有的操作都加上验证码,因此验证码只能作为一种辅助手段,不能作为主要解决方案。
4、验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。
5、为每个表单添加令牌token并验证。

什么是 CSRF 攻击,如何避免?

CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。
防御手段:
验证请求来源地址;
关键操作添加验证码;
在请求地址添加 token 并验证。
参考技术A CSRF攻击,全称为“Cross-site request forgery”,中文名为跨站请求伪造,也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。与XSS相比,CSRF更具危险性。
如何防御CSRF攻击?
1、重要数据交互采用POST进行接收,当然POST也不是万能的,伪造一个form表单即可破解。
2、使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。
3、出于用户体验考虑,网站不能给所有的操作都加上验证码,因此验证码只能作为一种辅助手段,不能作为主要解决方案。
4、验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。
5、为每个表单添加令牌token并验证。

以上是关于什么是 CSRF攻击?的主要内容,如果未能解决你的问题,请参考以下文章

什么是CSRF攻击?

CSRF攻击详解 - 常见的Web攻击方法

什么是 CSRF攻击?

CSRF攻击

什么是CSRF攻击,如何预防

什么是 CSRF 攻击,如何避免?