OpenResty:匿名化查询参数
2020-1-24 16:45:44
收藏:0
阅读:101
评论:1
我正在尝试匿名化电子邮件地址(用 UUID 替换它),以避免在我的 Nginx 访问日志中以纯文本形式保留它们。目前,我只能通过覆盖 OpenResty 的 nginx.conf 将其替换为 *****:
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$anonymized_request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
....
map $request $anonymized_request {
default $request;
~([^\?]*)\?(.*)emailAddress=(?<email_address>[^&]*)(&?)(.*)(\s.*) "$1?$2emailAddress=*****$4$5$6"; # $email_address;
}
include /etc/nginx/conf.d/*.conf;
}
当前结果:
# curl http://localhost:8080/?emailAddress=dat@mail.de&attr=hello
127.0. 0.1 - - [24/Jan/2020:11:38:06 +0000] "GET /?emailAddress=*****&attr=hello HTTP/1.1" 200 649 "-" "curl/7.64.1" "-"
期望结果:
127.0. 0.1 - - [24/Jan/2020:11:38:06 +0000] "GET /?emailAddress=a556c480-3188-5181-8e9c-7ce4e391c1de&attr=hello HTTP/1.1" 200 649 "-" "curl/7.64.1" "-"
请问,是否可以将 email_address 变量传递给将其转换为 UUID 的脚本?或者,如何使用 log_by_lua_block 获得相同的日志格式?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

也许这不是一个完全确定性的方法,但这个是我通过谷歌找到的第一个 lua UUID 生成函数(所有的功劳都归于 Jacob Rus)。我略微修改了这个函数,使它使用随机种子,这样它就总是为相同的电子邮件地址生成相同的 UUID。你可以把它重写成任何你需要的样子,这只是个想法:
http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$anonymized_request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; ... map $request $anonymized_request { default $request; ~([^\?]*)\?(.*)emailAddress=(?<email_address>[^&]*)(&?)(.*)(\s.*) "$1?$2emailAddress=$uuid$4$5$6"; # $email_address; } ... server { ... set $uuid ''; log_by_lua_block { local function uuid(seed) math.randomseed(seed) local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' return string.gsub(template, '[xy]', function (c) local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb) return string.format('%x', v) end) end local email = ngx.var.arg_emailAddress if email == nil then email = '' end -- get CRC32 of 'email' query parameter for using it as a seed for lua randomizer -- using https://github.com/openresty/lua-nginx-module#ngxcrc32_short -- this will allow to always generate the same UUID for each unique email address local seed = ngx.crc32_short(email) ngx.var.uuid = uuid(seed) } } }