原生js获取cookie获取scrf防跨站攻击token

本文介绍了一种从客户端cookie中提取_CSRF令牌的方法。通过正则表达式匹配的方式,准确地获取_CSRF值,并对其进行处理以供后续使用。
var _csrf = (/_csrf=[^;]+;?/i).exec(document.cookie);

if(_csrf) {
    _csrf = _csrf[0].replace('_csrf=', '').replace(';', '');
}


### Django 前后端分离时的 CSRF 处理 在现代Web开发中,前后端分离架构变得越来越普遍。对于基于Django框架的应用程序,在这种架构下保持CSRF护的有效性和安全性至关重要。 #### 获取并设置CSRF Token 为了使前端能够安全地发起POST请求到Django服务器,必须先从服务器获取CSRF令牌,并将其作为自定义HTTP头的一部分发送给服务器[^1]。这可以通过创建专门用于返回CSRF令牌的API接口来完成: ```python from django.middleware.csrf import get_token from django.http import JsonResponse def get_csrf_token(request): token = get_token(request) return JsonResponse({'csrfToken': token}) ``` 此视图允许客户端通过访问特定URL(例如`/get_token/`)获得当前会话对应的CSRF令牌。 #### 客户端配置 一旦获得了CSRF令牌,就需要确保每次向受保护资源发出非GET类型的AJAX请求之前都将该令牌附加到请求头部。以下是使用JavaScript Fetch API的一个简单例子: ```javascript // JavaScript (Frontend) async function fetchWithCsrf(url, method='POST', body=null){ const response = await fetch('/api2/get_token'); let { csrfToken } = await response.json(); const headers = new Headers({ 'X-CSRFToken': csrfToken, 'Content-Type': 'application/json' }); const options = { method: method.toUpperCase(), credentials: 'include', headers: headers, ...(body && {'body': JSON.stringify(body)}) }; return fetch(url, options); } ``` 这段代码展示了如何构建一个通用函数`fetchWithCsrf()`,它接受目标URL和其他可选参数如HTTP动词和负载数据。重要的是要注意这里的`credentials: 'include'`选项,这是为了让浏览器随同跨域请求一起发送Cookie所必需的[^4]。 #### 后端路由配置 最后一步是更新Django应用中的URL模式以包含上述新添加的功能。假设已经有一个名为`app/views.py`文件,则可以在项目的根级urls.py中加入相应的路径映射[^2]: ```python urlpatterns = [ ... path('api2/get_token', getToken), ... ] ``` 这里假定`getToken`就是上面提到的那个用来分发CSRF令牌的方法名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值