Django的cs rf token验证

CSRF(Cross Site Request Forgery protection),中文简称跨站请求伪造。django中对POST请求,csrf会进行认证处理,csrf认证机制是防御跨站伪造功能,在没有任何处理的前提下,POST请求会报错。
Django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,这样就能避免被 CSRF 攻击。

例子如下:

login.html页面:

浏览器访问之后的网页源代码:

有一个默认隐藏起来的input框,其中有value值,会跟随用户提交的数据一起到达服务器。Django会在数据到达之后,在内部读取这个隐藏起来的value。用来校验这个请求是不是我们的网页。如果不是,就当作非法请求。

官方文档中说到,检验token时,只比较secret是否和cookie中的secret值一样,而不是比较整个token。

源码中,token字符串的前32位是salt, 后面是加密后的token

例如:

<input type="hidden" name="csrfmiddlewaretoken" value="XmgOYha8SA4FiGlWXweKaDu0dmuJYyB2e0eF3gegFHSW4zMgovNMamWNsV4TwIN1">

salt:XmgOYha8SA4FiGlWXweKaDu0dmuJYyB2

token:e0eF3gegFHSW4zMgovNMamWNsV4TwIN1

salt对应唯一的secret
django会验证表单中的token和cookie中token中的salt是否能解出同样的secret,secret一样则本次请求合法。

参考于:Django中csrf token验证原理 - 扫驴 - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值