nginx+lua 实现token防盗

-- 验证token文件
-- 2020/01/08 16:25

-- 更新缓存时间
ngx.update_time();
local ntime = ngx.time();
local uri = ngx.var.uri;
-- 获取请求参数
local args = ngx.req.get_uri_args();
-- 获取请求参数中 token 信息
local token = args["token"];

if (token == nil) then

-- token为空
return ngx.exit(403)

else

local etime = tonumber(string.sub(token,9))
-- 校验token格式是否正确
if (string.len(token) == 18 and etime ~= nil and tostring(string.sub(token,0,8)) ~= nil) then
    -- 判断token是否过期
    if ( ntime > etime ) then
        return ngx.exit(403)
    end
    local str = string.sub(ngx.md5(etime.."key"..etime),0,6)
    local token2 = string.sub(ngx.md5("key"..etime..str),0,8)..etime;
    -- 校验 token 是否相等
    if token ~= token2 then
        -- token错误
        return ngx.exit(403)
    end
else
    return ngx.exit(403)
end

end
代码片段

发表评论

电子邮件地址不会被公开。 必填项已用*标注