目录
1.0什么是csrf攻击?
2.0 CSRF攻击流程
3.0 CSRF防护
3.1验证http请求标头中指定的字段
3.2添加检查Token
4.0总结指南
1.0什么是csrf攻击? CSRF攻击的全称是跨网站请求伪造(cross site request forgery ),是对网站的恶意利用。 它听起来有点类似于XSS跨站点攻击,但是实际上,CSRF明显不同于XSS,它将利用站点中的信任用户,而CSRF通过伪装来自信任用户的请求利用信任站点。 CSRF攻击可以理解攻击者窃取你的身份,以你的名义向第三方网站发送恶意请求。 CRSF能做的事情包括利用你的身份发邮件、发邮件、转账交易、窃取账户。
2.0 CSRF攻击流程
与1. 对比XSS:跨站点脚本(XSS )相比,XSS使用用户对指定站点的信任,CSRF使用站点对用户web浏览器的信任。
(XSS详细说明: https://blog.csdn.net/weixin _ 41950078/article/details/115427888 ) ) ) ) ) ) ) ) )。
CSRF的特点:
攻击将在第三方站点发起,而不是在被攻击的站点发起。 被攻击的网站无法防止攻击。 不是利用攻击受害者在被攻击网站上的登录证书,直接窃取冒充受害者提交操作的数据。 流程攻击者无法获得受害者的登录证书,只是“冒充”。 跨网站请求可以通过多种方式进行,包括图像URL、超链接、CORS和Form提交。 有些要求方式可以直接嵌入第三方论坛、文章,难以追踪。 CSRF通常在域之间进行。 因为外部域通常容易被攻击者控制。 但是,如果域下有容易使用的功能,例如可以发布图或链接的论坛或评论区域,则攻击可以直接在域下进行,这种攻击更危险。
2.完成一次CSRF攻击,必须满足以下两个条件:
用户登录受信任的网站并在本地生成Cookie (图中的步骤2 )。 在不注销此受信任站点的情况下访问危险站点(图中的步骤3 )。 虽然同时满足这两个条件似乎并不容易,但实际情况是,即使用户登录到一个站点并关闭浏览器,本地存储的Cookie也不一定会立即过期。
在3.0 CSRF措施中,该如何防御呢?
CSRF攻击主要有两个特点:
1 .通常发生在第三方域名中
2. CSRF攻击者只能使用而无法获取Cookie等信息
3.1验证在http请求标头中指定的字段referer是否为包含请求源地址的http请求标头。服务器知道正确来源,验证referer禁止来自第三方网站的请求登录受限制的站点后,页面上的所有操作实际上都是该站点的内部请求,但攻击者只能在自己的站点上创建请求才能实施CSRF攻击。 该请求的Referer指向攻击者自己的客户端或站点,因此可以通过添加拦截器过滤Referer来阻止攻击。
缺点:
在某些浏览器中,用户可以指定没有referer。 referer为空时需要取舍,是否通过。 Referer值记录访问源,认为某些用户侵犯了自己的隐私权,而某些用户打开了浏览器的防跟踪功能,不提供Referer,因此典型的用户请求可能会被拒绝。 Referer由浏览器提供,不能保证所有浏览器的Referer都不会被篡改。 3.2添加检查Token CSRF的另一个特点是
,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用Cookie中的信息。而CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。
我们可以在HTTP请求中加入一个随机产生的Token,并在服务器端建立一个拦截器来验证这个Token。当用户登陆后,Token保存在Session里。在用户发出请求时,该令牌会与其他请求信息一并被发出。在接收用户请求时,如果请求中没有Token或者Token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
CSRF Token的防护策略分为三个步骤:
1.将CSRF Token输出到页面中:服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密。显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。为了安全起见Token最好还是存在服务器的Session中,之后在每次页面加载时,使用JS遍历整个DOM树,对于DOM中所有的a和form标签后加入Token。这样可以解决大部分的请求。
2.页面提交的请求携带这个Token: GET :http://url?csrftoken=tokenvalue。 POST:<input type=”hidden” name=”csrftoken” value=”tokenvalue”/> 这样,就把Token以参数的形式加入请求了。
3.服务器验证Token是否正确:当用户从客户端得到了Token,再次提交给服务器的时候,服务器需要判断Token的有效性。
4.0 小结导图