网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 其他技术区 > 云计算 >

apisix~csrf插件

时间:2025-03-25 13:26

人气:

作者:admin

标签:

导读:https://www.devzery.com/post/how-to-test-api-with-csrf-token-in-postman-complete-guide https://apisix.apache.org/docs/apisix/plugins/csrf/ 配置信息 { key:...
{
    key: token的密钥
    expires:过期时间,默认7200(秒)
    name: token在cookie中的名称,默认是apisix-csrf-token
}

先在cookie中写入csrf-token

local function gen_sign(random, expires, key)
    local sha256 = resty_sha256:new()

    local sign = "{expires:" .. expires .. ",random:" .. random .. ",key:" .. key .. "}"

    sha256:update(sign)
    local digest = sha256:final()

    return str.to_hex(digest)
end


local function gen_csrf_token(conf)
    local random = math.random()
    local timestamp = ngx_time()
    local sign = gen_sign(random, timestamp, conf.key)

    local token = {
        random = random,
        expires = timestamp,
        sign = sign,
    }

    local cookie = ngx_encode_base64(core.json.encode(token))
    return cookie
end

function _M.header_filter(conf, ctx)
    local csrf_token = gen_csrf_token(conf)
    local cookie = conf.name .. "=" .. csrf_token .. ";path=/;SameSite=Lax;Expires="
                   .. ngx_cookie_time(ngx_time() + conf.expires)
    core.response.add_header("Set-Cookie", cookie)
end

一个csrf-token由随机数,过期时间,签名组成,下面介绍一下这3个参数

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

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

  • scripts里添加脚本
var xsrfCookie = postman.getResponseCookie("apisix-csrf-token");
if (xsrfCookie) {
  pm.environment.set("xsrf-token",   decodeURIComponent(xsrfCookie.value)); // 第一次请求后,正确的token就写到postman的cookie里了,下次post请求带上就对了
}
  • header中添加csrf
  • cookie里的csrf也会被传到apisix
  • 最后将header和cookie里的值进行比较

如果出现apisix-csrf-token被篡改,会返回401

{"error_msg":"csrf token mismatch"}

作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980

支付宝扫一扫,为大叔打赏!

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信