# XSRF 防御
在前面的章节中,我们发现request请求处理函数,upload上传文件,download下载文件都有xsrf 防御功能。所以本章节我们来了解一下在微信小程序中使如何实现xsrf 防御功能
# 代码
我们先来看一下代码的实现,代码在wx-axios/lib/adapters/upload.js,wx-axios/lib/adapters/request.js ,wx-axios/lib/adapters/download.js都有
const xsrfValue = config.xsrfStorageName
? wx.getStorageSync(config.xsrfStorageName)
: undefined;
if (xsrfValue) {
requestHeaders[config.xsrfHeaderName] = xsrfValue;
}
# 分析
跟axios不同的是,axios是从cookies存储中读取值的,但是微信小程序并没有cookies存储,只能存储在storage中,所以要通过wx.getStorageSync读取对应的值。注意,要使用wx.getStorageSync,不能使用wx.getStorage,wx.getStorage是一个异步函数,会导致读出来的值为undefined。
xsrfStorageName是存储在storage中的key值,xsrfHeaderName是自定义请求头的key值,xsrfHeaderName的值应该是跟后台一起约定好的。
# 总结
xsrf 防御的原理和方案跟所使用的环境是无关的,只是不同的环境在代码上的实现可能会有所不同。
本章节一些相关的东西可查看axios源码分析的客户端防御 XSRF章节