Ajax 使用CSRF token与Flask /Django交互

本文介绍了CSRF攻击原理及其防御方法,重点讲解如何利用Ajax结合Token进行CSRF防御。阐述了服务器如何通过生成Token并验证来防止攻击,并提供了两种在Ajax请求中实现Token验证的方法,包括通过meta标签和隐藏input字段传递Token。
摘要由CSDN通过智能技术生成

跨站请求伪造也被称为one-click attack 或者 session riding,通常缩写为CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。目前主流的防御方法就是通过Token验证,另外如果前端对存在CSRF防御的服务进行请求,会出现”400 bad request“。在写程序时有时候会让忽略CSRF问题的人莫名其妙,我就是错了好几次(我以为是我的数据格式的问题),看到了浏览器Console才恍然大悟。

1. CSRF攻击原理

当我们登录访问一个网站,登录后需要访问不同页面,服务器为了记住我们已经登录的身份,会把我们的状态临时储存在session中,并且将session_id发送给客户端存储于cookie中,由于网站是通过检查cookie中是否存在合法且匹配的session_id,来使用户保持登入状态。

这样就会出现一个问题,当用户在登录的状态下,被诱导访问了黑客的网站,黑客的网站设置一个骗你点击的页面,比如抽红包,用户点了抽奖按钮,抽奖按钮其实是指向一个交易接口的链接,这就可以伪造客户的身份,在客户不知情的情况下做一些事请。

2. 防御CSRF原理

比如服务器接受到访问存在某个表单的请求,服务器在回传这个表单之后会根据某种规则生成一个字符串一同传送给客户端,当用户操作完准提交表单,这个字符串会被一起提交给服务器,服务器验证这个字符串是否合法再做出反应。这个字符串就是Token。

3. Ajax使用Token完成CSRF防御验证

方法一

首先在你的获得数据的HTML页面创建一个 meta 标签用于接受Flask或者Django传过来的Token。

    <meta name="csrf-token" content="{
    { csrf_token() }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值