# XSRF 防御

在前面的章节中,我们发现request请求处理函数upload上传文件download下载文件都有xsrf 防御功能。所以本章节我们来了解一下在微信小程序中使如何实现xsrf 防御功能

# 代码

我们先来看一下代码的实现,代码在wx-axios/lib/adapters/upload.jswx-axios/lib/adapters/request.jswx-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.getStoragewx.getStorage是一个异步函数,会导致读出来的值为undefined

xsrfStorageName是存储在storage中的key值,xsrfHeaderName是自定义请求头的key值,xsrfHeaderName的值应该是跟后台一起约定好的。

# 总结

xsrf 防御的原理和方案跟所使用的环境是无关的,只是不同的环境在代码上的实现可能会有所不同。

本章节一些相关的东西可查看axios源码分析的客户端防御 XSRF章节