CSRF漏洞原理攻击与防御(非常细)

365bet足球数据直播 📅 2025-09-14 15:50:33 ✍️ admin 👀 9067 ❤️ 937
CSRF漏洞原理攻击与防御(非常细)

CSRF漏洞原理攻击与防御

目录

CSRF漏洞原理攻击与防御一、什么是CSRF?二、CSRF攻击原理及过程三、CSRF分类1. GET类型的CSRF2. POST类型的CSRF

四、CSRF漏洞的挖掘五、CSRF漏洞的防御1、验证码2、在请求地址中添加 token 并验证3、在 HTTP 头中自定义属性并验证4、验证 HTTP Referer 字段

总结

提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是CSRF?

CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。 简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会觉得这是真正的用户操作而去运行。

二、CSRF攻击原理及过程

CSRF为什么能够攻击成功?

其本质原因是重要操作的所有参数都是可以被攻击者猜测到的。

攻击者只有预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求;反之,攻击者将无法攻击成功。

从上图能够看出,要完毕一次CSRF攻击,受害者必须依次完毕两个步骤:

登录受信任站点A,并在本地生成Cookie。

在不登出A的情况下,访问危急站点B。

1、客户端通过账户密码登录访问网站A。 2、网站A验证客户端的账号密码,成功则生成一个sessionlD,并返回给客户端存储在浏览器中。 3、该客户端Tab—个新页面访问了网站B。 4、网站B自动触发要求该客户端访问网站A。(即在网站B中有链接指向网站A) 5、客户端通过网站B中的链接访问网站A。(此时携带有合法的SessionID进行访问站A的) 6、此时网站A只需检验sessionIlD是否合法,合法则执行相应的操作。(因此具体啥工具就得看链接,以及网站B要求访问时携带的数据)

所以要被CSRF攻击,必须同时满足两个条件:

登录受信任网站A,并在本地生成Cookie。 在不登出A的情况下,访问危险网站B。

三、CSRF分类

CSRF(Cross-Site Request Forgery),跟XSS漏洞攻击一样,存在巨大的危害性。

你可以这么来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等

1. GET类型的CSRF

1.GET类型的CSRF

仅仅须要一个HTTP请求。就能够构造一次简单的CSRF。

样例:

银行站点A:它以GET请求来完毕银行转账的操作,如:

http://www.mybank.com/Transfer.php?toBankId=11&money=1000

危险站点B:它里面有一段HTML的代码例如以下:

首先。你登录了银行站点A,然后访问危险站点B,噢,这时你会发现你的银行账户少了1000块。

为什么会这样呢?原因是银行站点A违反了HTTP规范,使用GET请求更新资源。

在访问危险站点B的之前。你已经登录了银行站点A,而B中的 一个合法的请求,但这里被不法分子利用了)。

所以你的浏览器会带上你的银行站点A的Cookie发出Get请求,去获取资源以GET的方式请求第三方资源(这里的第三方就是指银行站点了),

原本这是:

http://www.mybank.com/Transfer.php?toBankId=11&money=1000

结果银行站点服务器收到请求后,觉得这是一个更新资源操作(转账操作),所以就立马进行转账操作。

2. POST类型的CSRF

在CSRF攻击流行之初,曾经有一种错误的观点,认为CSRF攻击只能由GET请求发起。因此很多开发者都认为只要把重要的操作改成只允许POST请求,就能防止CSRF攻击。

这样的错误观点形成的原因主要在于,大多数CSRF攻击发起时,使用的HTML标签都是