首页 > 编程知识 正文

信息网络安全,csrf攻击防范的方法有哪些

时间:2023-05-04 05:05:35 阅读:150910 作者:2376

目录

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 小结导图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。