首页 > 试题广场 >

CSRF攻击是什么?

推荐

得分点

CSRF时跨站请求伪造、盗用用户身份发起请求

参考答案

标准回答

CSRF跨站点请求伪造(Cross Site Request Forgery)和XSS攻击一样,有巨大的危害性,就是攻击者盗用了用户的身份,以用户的身份发送恶意请求,但是对服务器来说这个请求是合理的,这样就完成了攻击者的目标。CSRF攻击的过程原理是:

  • 用户打开浏览器,访问目标网站A,输入用户名和密码请求登录
  • 用户信息在通过认证后,网站A产生一个cookie信息返回给浏览器,这个时候用户以可正常发送请求到网站A
  • 用户在没有退出网站A之前在同一个浏览器打开了另一个新网站B。
  • 新网站B收到用户请求之后返回一些攻击代码,并发出一个请求要求访问返回cookie的网站A
  • 浏览器收到这些攻击性代码之后根据新网站B的请求在用户不知道的情况下以用户的权限操作了cookie并向网站A服务器发起了合法的请求。

预防CSRF攻击主要有以下策略:

  • 使用验证码,在表单中添加一个随机的数字或者字母验证码,强制要求用户和应用进行直接的交互。
  • HTTP中Referer字段,检查是不是从正确的域名访问过来,它记录了HTTP请求的来源地址。
  • 使用token验证,在HTTP请求头中添加token字段,并且在服务器端建立一个拦截器验证这个token,如果token不对,就拒绝这个请求。

加分回答

验证HTTP Referer字段的好处就是实施起来特别简单,普通的网站开发不需要特别担心CSRF漏洞,只需要在最后面设置一个拦截器来验证referer的值就可以了,不需要改变已有的代码逻辑,非常便捷。但是这个方法也不是万无一失的,虽然referer是浏览器提供的,但是不同的浏览器可能在referer的实现上或多或少有自身的漏洞,所以使用referer的安全保证是通过浏览器实现的。使用token验证的方法要比referer更安全一些,需要把token放在一个HTTP自定义的请求头部中,解决了使用get或者post传参的不便性。

延伸阅读

举个简单的例子就是如果用户A在某个社交平台上可以通过一个get请求对某个人进行关注,这个请求发送到服务器会先验证这个请求是不是来自一个合法的会话session,并且这个session用户A已经成功登陆。然后前提是这个攻击者知道get请求的格式,它通过一样的get请求向服务器发起请求,但是这个请求无法通过认证,因为这个请求的来源不是用户A。这时候攻击者自己做一个网站,在网站中放入get请求,然后攻击者需要诱导用户A去访问这个网站,这时候请求会在用户A的浏览器发出,而这个请求会附带上用户A的认证信息,前提是用户A的session恰巧没有过期,那么这时候用户A就会通过攻击者的get请求在不知不觉中在社交平台关注到攻击者的账号。

编辑于 2021-09-15 12:25:29 回复(0)
csrf:跨站点请求伪造(Cross-Site Request Forgeries),也被称为 one-click attack 或者 session riding。冒充用户发起请求(在用户不知情的情况下), 完成一些违背用户意愿的事情(如修改用户信息,删初评论等)。
发表于 2023-05-11 17:40:44 回复(0)
跨域请求伪造,攻击者盗用了你的身份以你的名义发送恶意请求
发表于 2022-04-06 19:41:50 回复(0)
CSRF(Cross-site request forgery), 中文名称:跨站请求伪造。攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能做的事情包括:以你的名义发送邮件,发消息,盗取你的账号,在受害者不知情的情况下,以受害者名义伪造请求发送给受攻击站点,从而在受害者并未授权的情况下执行受害者权限下的各种操作。
发表于 2022-03-07 15:22:43 回复(0)