2013-08-30 33 views
3

我有一個網站,我收到了很多垃圾評論。通過查看垃圾郵件來源的IP地址,他們主要來自不太可能有任何真人需要與我的英文網站進行互動的國家,因此我想阻止他們。如何阻止POST請求的IP,但不是GET?

這應該是非常直接的,但是如果來自這些國家的流量實際上可以查看我的內容,而不是訪問評論,註冊等形式,我希望它。所以我想要讓他們發出GET方法請求,但不是POST方法請求。

理想情況下,我想在站點的.htaccess文件中執行此操作,而不是將其編碼到爲站點供電的PHP腳本中。經過一番搜索之後,我發現我認爲正是我所需要的:。看起來我可以完全按照上面的描述:

# Block China, Russia etc. from POSTs and similar methods 
<Limit POST PUT DELETE> 
order deny,allow 
deny from 210.5.214.128/29 
deny from 210.89.69.160/28 
# Hundreds more lines... 
# My current IP (sample provided here, actual used in reality), to test 
deny from 100.100.100.100 
allow from all 
</Limit> 

# Allow anyone to do GETs and HEADs 
<Limit GET HEAD> 
order deny,allow 
allow from all 
</Limit> 

但它沒有達到預期的效果。我可以做GET請求(根據需要),但POST也仍然正常工作,我可能會期望403 Forbidden錯誤。

如果我不使用標籤並將IP置於拒絕列表中,它確實成功阻止我訪問該站點(包括GET和POST)。

任何人都可以告訴我,我需要改變什麼?

+0

'理想的情況下/可溼性粉劑管理員,我想在站點的.htaccess文件中執行此操作,而不是實際將其編碼到PHP腳本中 - 爲什麼?後者更快,更容易維護。 – symcbean

+0

對我來說,htaccess選項更容易維護,因爲我的無用IP源以這種格式提供它們。爲了在PHP級別達到所需的結果,我需要將它們硬編碼爲一個數組(有點麻煩,但可能),解析包含IP的上傳文本文件(稍微慢一點),或者把它們放在一個數據庫中並從那裏得到它們(幾乎可以肯定效率較低)。 另外,.htaccess選項允許我在整個站點上執行此操作,而無需在每個PHP腳本中都包含此函數。 – Jack

+0

請執行一些基準測試,並記下運行時的內存使用情況。即使假定服務器重新啓動不成問題,性能也會如此。 – symcbean

回答

3

變化的允許否認這樣的順序:

<Limit POST PUT DELETE> 
order allow,deny 
allow from all 
deny from 210.5.214.128/29 
deny from 210.89.69.160/28 
# Hundreds more lines... 
# My current IP (sample provided here, actual used in reality), to test 
deny from 100.100.100.100 
</Limit> 

<Limit GET HEAD> 
order deny,allow 
allow from all 
</Limit> 
0

座後端的劇目如:除允許IP(即使你有密碼)

<Limit POST PUT DELETE> 
order deny,allow 
deny from all 
#allow from localhost 
#allow from 127.0.0.1 
allow from xxx.xxx.xx.xx 
</Limit> 

# Allow anyone to do GETs and HEADs 
<Limit GET HEAD> 
order deny,allow 
allow from all 
</Limit> 
+0

請用英文寫下來,如果你還在那裏,請把'傑克移走。因爲它可能對「傑克」以外的人有用。 –