Dot-Htaccess

htaccess 規則以防止對 WordPress index.php?pubkey= 的惡意發布請求

  • February 12, 2019

我一直在查看由一個名為 Bad Behavior 的 WordPress 外掛創建的日誌,其中有許多來自不同 IP 地址的條目在一天中以不同的時間間隔請求以下 URL:

POST www.example.com/index.php?pubkey=b13bdb8297326599cf86aj25274e6a0c&bvTime=1549500166&bvVersion=0.1&bvMethod=getdata&sha1=true&sig=53fb643e40685ed89aa6754483b0a0d06bf1e63d0

URL 中保持不變/index.php?pubkey=的部分與日誌中其他條目的其餘部分不同。

如果可能的話,我想做的是通過.htaccess根目錄中的 阻止這些發布請求。

在研究時我在這裡找到了這個答案:Restrict Access To index.php - Apache

但由於我並不真正了解如何在.htaccess文件中正確建構指令,因此我不想在其中添加可能會阻止合法流量或導致其他問題的內容。

同樣在搜尋時,我在https://perishablepress.com/protect-post-requests/上找到了這條資訊,但他們警告您,如果網站不是靜態的或使用表單,則使用以下規則可能會出現問題,特別是網站可以。

#deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>

話雖如此,我希望這裡添加了足夠的資訊,可以幫助某人幫助我找到這個特定問題的答案。

該解決方案確實與您連結到的問題非常相似。

但是,我要問的一個問題是,您是否需要專門針對 POST 請求?為什麼不啟動任何請求(GET 或 POST)/index.php?pubkey=?或者這在 WordPress 中是否有其他含義?

在這種情況下,您可以在.htaccess文件頂部執行以下操作:

RewriteCond %{QUERY_STRING} ^pubkey=
RewriteRule ^index\.php$ - [F]

不需要<IfModule>包裝器。無需重複該RewriteEngine指令,因為這無疑是在文件的後面設置的。


要專門針對 POST 請求,您可以添加另一個條件,就像您在範例中所做的那樣:

RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{QUERY_STRING} ^pubkey=
RewriteRule ^index\.php$ - [F]

**更新:**它沒有像我預期的那樣工作,因為我可以通過訪問來載入頁面www.example.com/index.php?pubkey=

如果上述指令在.htaccess文件中的錯誤位置並且與其他指令衝突,則可能會發生這種情況。它需要位於.htaccess文件的最頂部,在任何現有的 mod_rewrite 指令之前。

經過一些試驗和錯誤,這完全阻止了我,它可以工作,但我不明白為什麼,你能解釋一下你給我的和這個之間的區別嗎?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (pubkey=.*) [NC]
RewriteRule (.*) - [F,L]
</IfModule>

這要籠統得多,並且不僅會阻止您問題中所述的 URL(可能太多)。這些指令阻止查詢字元串中任何位置包含(不區分大小寫)的任何URL路徑*。*因此,它將阻止以下 URL(除了上述 URL):pubkey=

  • example.com/foo/bar?pubkey=xyz
  • example.com/foo/bar/baz?abc=1&xyz=2&pubkey=
  • example.com/foo/bar/baz?def=2&xyz=3&PuBkEy=xyz

這些指令可以簡化:

RewriteCond %{QUERY_STRING} pubkey= [NC]
RewriteRule .* - [F]

無需擷取RewriteRule 模式CondPattern。_ 正則表達式pubkey=pubkey=.*. 使用L標誌時不需要F標誌。並且如上所述,無需重複RewriteEngine指令或使用<IfModule>包裝器。

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