捕捉 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;
}

(我明白那個如果是邪惡的, 但它似乎有必要

這無法在 上觸發/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之類的東西。

相關內容