CSRF 攻击

概念

CSRF 攻击指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。
如果用户在被攻击网站中保存了登录态,那么攻击者就可以利用这个登陆状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。

CSRF 攻击的本质是利用 cookie 会在同源请求中携带发送给服务器的特点,来实现用户的冒充。

攻击类型

  • GET 类型的攻击:自动发起 GET 请求,比如在网站中的一个 img 标签里构建一个请求,当用户打开这个网站时,就会自动发起提交。
<!DOCTYPE html>
<html>
  <body>
    <h1>黑客的站点:CSRF攻击演示</h1>
    <img src="https://example.org/sendcoin?user=hacker&number=100">
  </body>
</html>
  • POST 类型的攻击:自动发起 POST 请求,比如构建一个表单,然后隐藏它,当用户进入页面时,自动提交这个表单。
<!DOCTYPE html>
<html>
<body>
  <h1>黑客的站点:CSRF攻击演示</h1>
  <form id='hacker-form' action="https://example.org/sendcoin" method=POST>
    <input type="hidden" name="user" value="hacker" />
    <input type="hidden" name="number" value="100" />
  </form>
  <script> document.getElementById('hacker-form').submit(); </script>
</body>
</html>
  • 链接类型的攻击:引诱用户点击链接,比如在 a 标签的 href 属性里构建一个请求,然后诱导用户去点击。
<div>
  <img width=150 src=http://images.cn/1612/1_161230185104_1.jpg> </img> </div> <div>
  <a href="https://example.org/sendcoin?user=hacker&number=100" taget="_blank">
    点击下载美女照片
  </a>
</div>

如何预防 CSRF 攻击

  • 进行同源检测,服务器根据 http 请求头中 origin 或者 referer 信息来判断请求是否为允许访问的站点,从而对请求进行过滤。
  • 使用 CSRF Token 进行验证,服务器向用户返回一个随机数 token,当网站再次发起请求时,在请求参数中加入服务器端返回的 token,然后服务器对这个 token 进行验证。
    • 在客户端,CSRF令牌可以保存在以下位置之一:
      ⅰ. Cookie:CSRF令牌可以作为Cookie的一部分发送到客户端并存储在浏览器的Cookie中。这种方法需要服务器将CSRF令牌与Cookie进行关联,并确保在每个请求中都包含相应的Cookie。
      ⅱ. HTML表单字段:CSRF令牌可以作为隐藏字段包含在表单中。当用户提交表单时,CSRF令牌将包含在请求参数中发送回服务器。
      ⅲ. 自定义标头:CSRF令牌可以作为自定义HTTP标头的值发送到服务器。客户端可以使用JavaScript将CSRF令牌添加到每个请求的标头中。
  • 对 Cookie 进行双重验证,服务器在用户访问网站页面时,向请求域名注入一个 Cookie,内容为随机字符串,然后当用户再次向服务器发送请求的时候,从 cookie 中取出这个字符串,添加到 URL 参数中,然后服务器通过对 cookie 中的数据和参数中的数据进行比较,来进行验证。
  • 在设置 cookie 属性的时候设置 Samesite,限制 cookie 不能作为被第三方使用,从而可以避免被攻击者使用。
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值