根据这个SQL 注入基础知识文章:
<…> 主要用于破坏\模糊测试 SQL 查询的操作是。
'
单引号"
双引号\
反斜杠(MySQL 转义字符)
有时也存在十六进制编码字符(例如0x3a3a
)。
我想记录并删除所有包含这些内容的请求。以下是我目前的情况:
set $susp 0;
if ($request_uri ~ "%27") {
set $susp 1;
}
location ~ \.php {
if ($susp = 1) {
access_log /var/log/nginx/for-review.log;
return 500;
}
# further fastcgi configuration
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
这在 上无法触发/foo/ba'r
,但至少在 上可以正常工作/?foo=b'ar
。但就是这样:我尝试的其他字符也没有被触发。
这是我尝试过的:
$request_uri ~ "%27|%22"
:单个有效,双重无效$request_uri ~ "%27|\""
:单个有效,双重无效$request_uri ~ "%27|0x"
:两者都有效,但0x
会出现误报拇指=230x240
我甚至不确定该如何处理反斜杠。
你们知道怎样让它发挥作用吗?
PS 考虑使用亚马逊,但它需要另一项服务(Cloudflare 或负载均衡器),而我还没有准备好。
PS 我意识到需要采取其他措施;这应该可以消除那些烦人的 GET 扫描。此外,我怀疑合法访问者在浏览时是否会遇到这些扫描。我的逻辑是这样的:任何使黑客复杂化的障碍都会有所帮助
答案1
主要内容nginx.conf
如下http {}
:
# set the variable
map "$request_uri" $susp {
default 0;
"~*(?<suspm>(\\x|%)(3c|3e|5c|22|27)+)" 1;
}
# match logging
log_format suspl '$remote_addr /$suspm/ - $remote_user $host [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_cookie"';
单独的虚拟主机配置:
location / {
if (\$susp = 1) {
access_log /var/log/suspl.log suspl;
return 403;
}
# etc…
}
还,
我怀疑合法访客在浏览时是否会有这些
注意:事实证明,它们%7B%22
的 cookie 中确实带有一些类似的东西,这些东西是由一些(并非全部)跟踪/分析软件设置的。