- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我要登录 $request_body
在访问日志中。
但是一些请求有一些敏感的 JSON 字段,如密码。
例子:
[2019-03-28] 201 - POST /api/user/add HTTP/1.1 - {\x22email\x22:\x22test@test.com\x22,\x22password\x22:\x22myPassword\x22}
[2019-03-28] 201 - POST /api/user/add HTTP/1.1 - {\x22email\x22:\x22test@test.com\x22,\x22password\x22:\x22****\x22}
最佳答案
这里有一些正则表达式模式,可用于混淆各种格式的请求正文数据。
当然,您需要做的第一件事是使用 log_format
将混淆数据添加到日志文件行格式中。指示:
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" "$obfuscated_request_body" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
password
)。
{"email":"test@test.com","password":"myPassword"}
{\x22email\x22:\x22test@test.com\x22,\x22password\x22:\x22myPassword\x22}
map
堵塞:
map $request_body $obfuscated_request_body {
"~(.*[{,]\\x22password\\x22:\\x22).*?(\\x22[,}].*)" $1********$2;
default $request_body;
}
name
的 JSON 数组和 value
对(由 jQuery serializeArray()
函数返回) [{"name":"email","value":"test@test.com"},{"name":"password","value":"myPassword"}]
[{\x22name\x22:\x22email\x22,\x22value\x22:\x22test@test.com\x22},{\x22name\x22:\x22password\x22,\x22value\x22:\x22myPassword\x22}]
map
堵塞:
map $request_body $obfuscated_request_body {
"~(.*[\[,]{\\x22name\\x22:\\x22password\\x22,\\x22value\\x22:\\x22).*?(\\x22}[,\]].*)" $1********$2;
default $request_body;
}
enctype="application/x-www-form-urlencoded"
) login=test%40test.com&password=myPassword
map
堵塞:
map
堵塞:
map $request_body $obfuscated_request_body {
~(^|.*&)(password=)[^&]*(&.*|$) $1$2********$3;
default $request_body;
}
map
转换:
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" "$obfuscated_request_body_2" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
map $request_body $obfuscated_request_body_1 {
"~(.*[{,]\\x22password\\x22:\\x22).*?(\\x22[,}].*)" $1********$2;
default $request_body;
}
map $obfuscated_request_body_1 $obfuscated_request_body_2 {
"~(.*[{,]\\x22email\\x22:\\x22).*?(\\x22[,}].*)" $1********$2;
default $request_body;
}
escape=default
转义模式 的
log_format
nginx 指令!如果由于某种原因您需要将此模式更改为
escape=json
(可从 nginx 1.11.8 获得)或
escape=none
(可从 nginx 1.13.10 获得),我也为这种转义模式构建了正则表达式,但由于一些奇怪的原因,在指定
pcre_jit on;
之前无法管理它们与 nginx 一起使用。指令(尽管它们通过了其他 PCRE 测试)。对于那些感兴趣的人,这些正则表达式是
escape=json
转义模式: map $request_body $obfuscated_request_body {
"~(.*[{,]\\\"password\\\":\\\")(?:[^\\]|\\{3}\"|\\{2}[bfnrt]|\\{4})*(\\\"[,}].*)" $1********$2;
default $request_body;
}
map $request_body $obfuscated_request_body {
"~(.*[\[,]{\\\"name\\\":\\\"password\\\",\\\"value\\\":\\\")(?:[^\\]|\\{3}\"|\\{2}[bfnrt]|\\{4})*(\\\"}[,\]].*)" $1********$2;
default $request_body;
}
name
的 JSON 数组和
value
对。
escape=none
转义模式: map $request_body $obfuscated_request_body {
"~(.*[{,]\"password\":\")(?:[^\\\"]|\\.)*(\"[,}].*)' $1********$2;
default $request_body;
}
map $request_body $obfuscated_request_body {
"~(.*[\[,]{\"name\":\"password\",\"value\":\")(?:[^\\\"]|\\.)*(\"}[,\]].*)" $1********$2;
default $request_body;
}
name
的 JSON 数组和
value
对。
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
$request
变量可以表示为
$request_method $request_uri $server_protocol
变量序列:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request_method $request_uri $server_protocol" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
$request_uri
的一部分可变数据:
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request_method $obfuscated_request_uri $server_protocol" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
map $request_uri $obfuscated_request_uri {
~(.+\?)(.*&)?(password=)[^&]*(&.*|$) $1$2$3********$4;
default $request_uri;
}
map
翻译如上图。
log_format debug '$remote_addr - $remote_user [$time_local] '
'"$request" $request_length $content_length '
'"$request_body" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
127.0.0.1 - - [09/Feb/2020:05:27:41 +0200] "POST /dump.php HTTP/1.1" 193 41 "\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\x0B\xED\xC11\x01\x00\x00\x00\xC2\xA0*\xEB\x9F\xD2\x14~@\x01\x00\x00\x00\x00o\x03`,\x0B\x87\x88\x13\x00\x00" 200 6881 "-" "curl/7.62.0"
$request_length
和
$content_length
值(193 和 41)反射(reflect)了来自客户端的传入数据的长度和
不是 解压缩数据流的字节数。
map $content_length $processed_request_body {
# Here are some regexes for log filtering by POST body maximum size
# (only one should be used at a time)
# Content length value is 4 digits or more ($request_length > 999)
"~(.*\d{4})" "Too big (request length $1 bytes)";
# Content length > 499
"~^((?:[5-9]|\d{2,})\d{2})" "Too big (request length $1 bytes)";
# Content length > 2999
"~^((?:[3-9]|\d{2,})\d{3})" "Too big (request length $1 bytes)";
default $request_body;
}
map $processed_request_body $obfuscated_request_body {
...
default $processed_request_body;
}
关于NGINX:在 access_log 中混淆密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55396459/
默认情况下,nginx 将其缓冲区刷新到 access_log 的频率如何? 在手册中没有信息,只是设置语法: access_log path [format [buffer=size [flush=
我要登录 $request_body在访问日志中。 但是一些请求有一些敏感的 JSON 字段,如密码。 例子: [2019-03-28] 201 - POST /api/user/add HTTP/1
我的 Apache access_log 文件的大小已经失控。所以我决定编写一个脚本,该脚本每 24 小时运行一次,只是将其删除,我知道它必须运行类似于以下的命令。 rm /var/log/httpd
我发现我的 access_log 占用了我的大部分硬盘。它的大小超过 200 GB。我怎样才能重置它? 我在装有 Plesk 的 CentOS 服务器上使用 Apache 2.2.3。 谢谢你们 !
我在 access_log 文件中发现以下错误。我的服务器是否被黑客入侵,因为我不知道为什么该 IP 地址和日志会出现在我的服务器上: GET /cgi-bin/test.sh HTTP/1.1" 4
我在后台运行(SSH)tail -f access_log | grep 'POST/index.php' > 测试 & 我在 /var/log/httpd 中运行了这个命令,其中存储了 access
我正在考虑使用 new conditionals在 Terraform v0.11 基本上根据环境打开或关闭配置块。 这是我想成为条件的块,例如,如果我有一个变量要打开以进行生产。 access_lo
错误:使用子查询时,列access_log.id必须出现在GROUP BY子句中或用于聚合函数] select to_char(date_trunc('day',create_time),'D
如何从 access_logs 中删除某些包含敏感信息的行。信息通过 POST 提供并在 $request_body 中发送 以下方式都失败了: 1> log_format filter
我需要一个 Linux bash 脚本,如果 apache 日志中的搜索中出现任何结果,该脚本会向我发送电子邮件。 我有一个非常简单的方法(句子)来研究SQL注入(inject)攻击,它只需搜索SQL
目前我保留了 6 周的 apache 访问日志。如果我在月底生成访问摘要: cat /var/log/httpd/access_log* | goaccess --output-format=csv
我们在同一个应用程序服务器 (WildFly 8.1) 上部署了两个 Web 应用程序(名为 A 和 B),配置如下所示。 两台主机的访问日志配置相同。现在的问题是 WildFly 要么将应用程序 A
我需要将统计数据写入实时 Apache access_log 文件(我有另一个进程计算 access_log 文件中的特定行,该文件定期向另一个进程报告)。 目前我只是通过在 php 中执行以下操作来
当我尝试为我的 elb access_log 创建 s3 存储桶时遇到 terraform 问题,我收到以下错误: Error applying plan: 1 error(s) occurred:
我们 AWS EBS 实例中的 elasticbeanstalk-access_log 日志文件充满了 408 错误,如下所示: 172.31.1.56 (-) - - [16/Mar/2016:10
在 Apache 日志配置中,可以指定应记录 HTTP 身份验证用户名。大多数 PHP 脚本都有自己的基于 cookie 的身份验证。即使身份验证是基于 cookie 的,PHP 中是否可以为 Apa
我们为 PHP 开发了 PaaS 解决方案。作为其中的一部分,我们为开发人员提供通过我们的 API 查看 Apache error_log 和 access_log 文件的功能。 目前,我们将日志写入
有没有办法让主进程记录到 STDOUT STDERR 而不是文件? 看来您只能将文件路径传递给access_log指令: access_log /var/log/nginx/access.log e
我的 nginx 版本是:openresty/1.5.12.1。 有没有办法只将 4xx 和 5xx 日志记录到 access_log 或附加 access_log 文件中? 我的意思是,这些日志应该
我正在尝试使用 maven 和 tomcat 运行简单的 struts 项目。 当我尝试执行下一个目标时:clean install tomcat7:run 我得到了 MojoExecutionExc
我是一名优秀的程序员,十分优秀!