apisix~csrf插件

打印 上一主题 下一主题

主题 1551|帖子 1551|积分 4653

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
配置信息
  1. {
  2.     key: token的密钥
  3.     expires:过期时间,默认7200(秒)
  4.     name: token在cookie中的名称,默认是apisix-csrf-token
  5. }
复制代码
插件解释

先在cookie中写入csrf-token
  1. local function gen_sign(random, expires, key)
  2.     local sha256 = resty_sha256:new()
  3.     local sign = "{expires:" .. expires .. ",random:" .. random .. ",key:" .. key .. "}"
  4.     sha256:update(sign)
  5.     local digest = sha256:final()
  6.     return str.to_hex(digest)
  7. end
  8. local function gen_csrf_token(conf)
  9.     local random = math.random()
  10.     local timestamp = ngx_time()
  11.     local sign = gen_sign(random, timestamp, conf.key)
  12.     local token = {
  13.         random = random,
  14.         expires = timestamp,
  15.         sign = sign,
  16.     }
  17.     local cookie = ngx_encode_base64(core.json.encode(token))
  18.     return cookie
  19. end
  20. function _M.header_filter(conf, ctx)
  21.     local csrf_token = gen_csrf_token(conf)
  22.     local cookie = conf.name .. "=" .. csrf_token .. ";path=/;SameSite=Lax;Expires="
  23.                    .. ngx_cookie_time(ngx_time() + conf.expires)
  24.     core.response.add_header("Set-Cookie", cookie)
  25. end
复制代码
一个csrf-token由随机数,过期时间,签名组成,下面介绍一下这3个参数

  • random 随机数
  • expires 过期时间
  • sign = 上面两个参数+key的sha256的散列数
  • 末了把这三个数进行base64写到cookie里

post,put,delete这些会改变数据状态的哀求,需要进行csrf的防护,在postman里可以这样测试

  • scripts里添加脚本
  1. var xsrfCookie = postman.getResponseCookie("apisix-csrf-token");
  2. if (xsrfCookie) {
  3.   //  console.log(encodeURIComponent(xsrfCookie.value))
  4.   // pm.environment.set("xsrf-token",   decodeURIComponent(xsrfCookie.value));
  5.    pm.environment.set("xsrf-token",xsrfCookie.value);//base64的值在cookie被url编码,不需要关心
  6. }
复制代码

  • header中添加csrf
  • cookie里的csrf也会被传到apisix
  • 末了将header和cookie里的值进行比较
假如出现apisix-csrf-token被篡改,会返回401
  1. {"error_msg":"csrf token mismatch"}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

冬雨财经

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表