【24.0】Django框架之csrf跨站请求

【一】跨站请求伪造介绍

【1】引入

  • CSRF(Cross-Site Request Forgery)跨站请求伪造是一种常见的网络攻击方式。
  • 攻击者通过诱导受害者访问恶意网站或点击恶意链接
    • 将恶意请求发送到目标网站上
    • 利用受害者在目标网站中已登录的身份来执行某些操作
    • 从而达到攻击的目的。

【2】举例

  • 假设受害者在一家网银网站上登录账户,然后继续浏览其他网页。
  • 同时,攻击者通过电子邮件等方式向受害者发送了一封包含恶意链接的邮件。
  • 当受害者点击该链接时,潜在的威胁就会变得非常现实。
  • 该链接指向一个由攻击者操纵的网站,该网站上的恶意代码会自动向网银网站发送一个请求,请求转账到攻击者的账户。
  • 由于受害者在网银网站中已经登录,所以该请求会被认为是合法的,这样攻击者就可以成功地进行转账操作。

【3】保护措施

  • 要保护自己免受CSRF攻击,网站开发者可以采取以下措施:

(1)使用CSRF令牌

  • 在用户的请求中添加随机生成的令牌,并将该令牌保存在用户会话中。
  • 每次提交请求时都会验证该令牌,以确保请求是合法的。

(2)启用SameSite属性:

  • 将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。
  • 这可以在一定程度上缓解CSRF攻击。

(3)严格验证请求来源

  • 服务器端可以验证请求的来源是否为预期的网站域名
  • 例如检查HTTP Referer头部。

(4)使用验证码

  • 在敏感操作(如转账、更改密码等)上使用验证码
  • 增加用户身份验证的防护。

【二】跨域请求伪造实际案例

【1】钓鱼网站

  • 搭建一个类似正规网站的页面
  • 用户点击网站链接,给某个用户打钱
  • 打钱的操作确确实实提交给了中国银行的系统,用户的钱也确实减少
  • 但是唯一不同的是,账户打钱的账户不是用户想要打钱的目标账户,变成了其他用户

【2】内部本质

  • 在钓鱼网站的页面针对对方账户,只给用户提供一个没有name属性的普通input框
  • 然后在内部隐藏一个已经写好带有name属性的input框

【3】如何避免

  • csrf跨域请求伪造校验
    • 网站在给用户返回一个具有提交数据功能的页面的时候会给这个页面加一个唯一标识
    • 当这个页面后端发送post请求的时候,我们后端会先校验唯一标识
      • 如果成功则正常执行
      • 如果唯一标识不符合则拒绝连接(403 forbidden)

【三】CSRF校验

【1】介绍

  • csrf校验是一种用于防止跨站请求伪造(Cross-Site Request Forgery)攻击的安全措施。

【2】CSRF校验策略

(1)添加CSRF Token字段

  • 在form表单中添加一个隐藏字段,用于存储CSRF Token的值。
  • 后端服务器在渲染表单时生成一个CSRF Token,并将其存储在会话中或者以其他方式关联到当前用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值