关于token防止CSRF的一点想法

本文介绍了一种通过生成和验证token来防止CSRF攻击的方法。服务器生成token并保存于session中,客户端表单提交时携带该token,服务器端验证token的有效性后将其失效,以此确保请求来源的安全性。
一、生成策略
1、服务器端根据一定算法,生成token;
2、保存到session中;
3、前台form表单中取到session放到隐藏标签内;
4、提交表单后和session中token比较,然后失效掉原先的session;

[color=red][b]示例代码:[/b][/color]

class Token(){
...

session.setAttribute("TOKEN","token");

...
}




<form>
<#-- freemaker取值方式 -->
<input type="hidden" id="_token" name="_token" value="${TOKEN}" />
</form>

class Action(){
...
if(session.getAttribute("TOKEN").equals(request.getParameter("_token"))){}
...
}


二、防止CSRF原理
用户请求信息的时候,被骇客获取中间请求信息,当然也会获取token信息,但是因为骇客并不能阻止用户请求到目标网站。
用户请求目标网站之后,token已经被校验。所以骇客获取的token信息依然无用。
当时骇客如果在用户请求到目标网站之前先去请求到目标网站,token的作用就没有了。


当然,预防CSRF攻击对refer校验也是不能少的。
### 如何使用 Token 在 Axios 中统一封装以防止 CSRF 攻击 为了有效防止跨站请求伪造 (CSRF) 攻击,在 `uni-app` 或其他 Vue 应用程序中可以通过统一配置 Axios 实现自动化处理。具体做法是在每次 HTTP 请求时自动附加安全令牌到头部字段,从而验证用户身份合法性。 #### 统一设置默认参数与拦截器 创建一个独立文件用于管理所有 API 调用逻辑,并在此处定义全局性的 Axios 配置选项以及自定义中间件函数: ```javascript // api.js import axios from 'axios'; const service = axios.create({ baseURL: process.env.NODE_ENV === 'production' ? '/prod-api/' : '/dev-api/', // 动态切换前后端分离项目接口地址 timeout: 5000, // 请求超时时间 }); service.interceptors.request.use( config => { const token = uni.getStorageSync('token'); // 假设已登录状态下存储于本地缓存中的访问凭证 if(token){ config.headers['Authorization'] = `Bearer ${token}`; // 对每个发出的数据包追加认证信息 config.headers['X-CSRF-TOKEN'] = token.split('.')[1]; // 提取 JWT Payload部分作为同步Token[^1] } return config; }, error => Promise.reject(error) ); export default service; ``` 上述代码片段展示了如何利用 Axios 的拦截机制实现对每一次网络通信过程的安全增强措施。特别注意这里不仅加入了常规的身份验证头 (`Authorization`) ,还额外引入了一个名为 `X-CSRF-TOKEN` 的自定义属性用来携带经过特殊处理后的 JSON Web Tokens(JWT)[^2] 。这种设计模式有助于服务器端识别并校验来自客户端提交的信息真实性,进而抵御潜在恶意行为的影响。 此外,还需确保服务端能够正确解析这些附加的HTTP Header 并执行相应的防护策略,比如对比 session 和 header 中提供的 csrf-token 是否匹配等操作[^3]。 #### 客户端和服务端协同工作 除了前端应用层面的努力外,后端也需要配合完成整个防御体系构建。通常情况下,当用户成功登陆之后,服务器会返回一对包含有唯一标识符的新鲜有效的csrf-token给浏览器保存起来;而在后续交互过程中,则要求应用程序随同每一个可能引起状态变更的动作一起发送该标记供后台审查确认无误后再继续下一步流程。 综上所述,通过合理运用 Axios 插件特性并与业务需求紧密结合的方式可以在很大程度上提高系统的整体安全性水平,减少遭受外部威胁的风险几率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值