根據這個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
一些(不是全部)追蹤/分析軟體設定的cookies之類的東西。