Nginx

在 GET 請求中擷取反斜杠、單引號和雙引號

  • January 22, 2020

根據這篇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":兩者都有效,但在thumb=230x2400x上得到誤報

而且我什至不確定如何處理反斜杠。

你們知道如何使它工作嗎?

PS 考慮過使用Amazon WAS,但它需要我還沒有準備好使用的另一項服務(Cloudflare 或負載均衡器)。

PS我意識到需要採取其他措施;這應該放棄那些煩人的 GET 掃描。此外,我懷疑合法訪問者在瀏覽時最終會擁有這些。我的邏輯是這樣的:任何使 hack 複雜化的障礙都有幫助

主要nginx.conf,下http {}

# set the variable
map "$request_uri" $susp {
   default 0;
   "~*(?&lt;suspm&gt;(\\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 中確實帶有一些(不是全部)跟踪/分析軟體設置的東西。

引用自:https://serverfault.com/questions/929861