捕获 GET 请求中的反斜杠、单引号和双引号

捕获 GET 请求中的反斜杠、单引号和双引号

根据这个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;
}

(我明白那个if 是邪恶的, 但它似乎是必要的

这在 上无法触发/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 中确实带有一些类似的东西,这些东西是由一些(并非全部)跟踪/分析软件设置的。

相关内容