Nginx
在 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; }
這無法在 上觸發
/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; "~*(?<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 中確實帶有一些(不是全部)跟踪/分析軟體設置的東西。