前端面经 关于CSRF攻击的原理和防范

CSRF攻击的概念

CSRF:跨站点请求伪造(cross-site request forgery)。简单来说就是,攻击者借用受害者的身份,向有CSRF漏洞的网站发送恶意请求。

举个例子:
攻击者盗用了受害者的身份,然后借用这个身份发送请求,如转账、购买商品等等。

CSRF原理

先在这个情节中设定三个对象:

  • 有CSRF漏洞的网站:WebA
  • 攻击者:WebB
  • 受害者:User

其中WebB是攻击者自己做的一个网站,是一个危险网站。

流程如下:

  1. 首先,User是网站WebA的用户,User访问并登录该网站;
  2. 登录验证后,网站WebA自然要给客户端User返回Cookie信息,并保存在浏览器或本地;
  3. User在没有退出WebA的情况下,又去访问了危险网站WebB;
  4. WebB接收到了User的请求,返回一些恶意代码。该恶意代码发出了要访问WebA的请求request;
  5. 因为WebB发出要访问WebA的请求,则带着还保存在浏览器/本地的Cookie,直接去访问WebA;
  6. 由于访问请求一定会带上Cookie给服务器端即WebA,且Cookie实际上已经被攻击者WebB盗用了,所以WebA却无法判断该请求是User还是攻击者WebB发出的。故WebB成功地盗用User的身份,拥有了User访问WebA的权限,以User的身份去访问WebA,以达到攻击的目的。

通过这个例子,我们可以发现,实际上Cookie是不那么安全的。

因为我们无法保证,自己在访问WebA的时候,不会去打开别的网站;也不能保证我们的Cookie信息会过期而不被攻击者盗用。

所以有下面三个方法去防范CSRF攻击

  • 验证HTTP Refer字段
  • 请求地址中添加token并验证
  • 使用验证码

方法一、验证HTTP Refer字段

HTTP协议中有一个Refer字段,该字段是用来记录HTTP请求的来源地址。

攻击者实施CSRF攻击时,从自己做的恶意网站,返回恶意代码,从而发送请求给漏洞网站。所以说,实际上这次恶意请求的来源地址是攻击者的恶意网站

那么网站通过验证HTTP Refer字段,以确定请求是来自自己的网站,而不是来自第三方网站,就可以了。
如果验证后,发现Refer字段指向的是其它网站,那么就有可能是攻击者通过恶意网站发送的恶意请求。加以拒绝。

方法二、请求地址中添加token并验证

CSRF攻击成功的关键是在于:攻击者能够仅凭借Cookie信息,就伪装成受害者的身份,并没有其它验证身份的信息。

可以在请求中添加攻击者无法伪造的信息,并且这些信息不存在于Cookie中,而是保存在session中(session在服务器端,更加安全)。

原理:
在发起的HTTP请求中,以参数的形式即加入一个token,并且在服务器端拦截这个token加以验证。如果没有token或者token验证不通过,则有理由认为是CSRF攻击而拒绝该HTTP请求。

则token在用户登录后,产生并存放在session中。在每次请求时拿出来,与请求中的token做对比。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silam Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值