koa2实现网站csrf防御

koa2实现网站csrf防御

发布于 2023-01-11 20:53:41
1.1K0
举报
文章被收录于专栏:前端心念

什么是csrf攻击?

 

csrf/xsrf又叫跨站请求伪造。

先说常见的登陆鉴权: 用户在你的网站登陆后,一般把登陆凭证(token)存储在cookie里,之后每次调接口都会自动携带,后端根据这条cookie鉴权,判定是登陆状态,进而允许进行安全操作。

虽然这种鉴权方式最为简便,但存在一种安全隐患,就是csrf。

csrf攻击者会利用http请求自动携带cookie的机制,在用户登陆后,引导用户点击它的攻击链接,进而拿到用户的token去进行恶意请求,比如购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

Description
Description

防御csrf攻击

思路:

由于csrf攻击者只能拿到cookie去干坏事,但它无法知道cookie里有什么,也拿不到其他有效信息。我们只需要除cookie外再加一道它做不到的验证就可以了。

前端首次加载页面的时候,调接口让后端植入一条csrfToken到cookie里。然后前端每次请求从cookie里取出然后放到请求头里给后端传输。

后端将植入给前端的csrfToken存储在session,然后一些安全接口(一般是除了get请求外的接口),请求时,需要先进行csrf比对,取出request请求头里的csrfToken和自己session里的csrfToken进行比对,完全一致才放行

代码实现

前端(react)

代码语言:javascript
复制
1//App.tsx
2//根组件,判断cookie里有没有csrfToken,没有就请求后端种植
3  useEffect(() => {
4    if (!cookie.get("csrf_token")) {
5      request("/all/getCsrfToken");
6    }
7  }, []);
代码语言:javascript
复制
1//request.ts
2//axios请求拦截器内置了csrf方法,如下配置即可自动取出cookie里的csrf并放到请求头
3request.interceptors.request.use((config: any) => {
4  // 开启顶部加载进度条
5  Nprogress.start();
6
7  config.xsrfHeaderName = "X-CSRF-TOKEN";
8  config.xsrfCookieName = "csrf_token";
9
10  return config;
11});

后端(koa2)

后端利用koa-csrf中间件实现

posted on 2024-08-12 12:46  漫思  阅读(4)  评论(0编辑  收藏  举报

导航