阻止代理訪問
① 如何屏蔽代理訪問
代理的網站好象沒辦法,但是你可以直接顯示他真實的IP地址,自己裝管理軟體就可以了!封殺代理可能很難!技術要求太高了!~
② 怎麼樣在伺服器上面禁止所有代理IP的訪問
事實上,你從自己的伺服器端是沒有辦法的。
變通的方法是:
從各大代理列表網站把代理伺服器的ip列表當下來,然後把這些列表中的ip地址在你的伺服器的ip過濾策略中(或者你的防火牆上)全部設置為禁止訪問。
最好編寫一個腳本,定期更新這些代理伺服器ip列表,並自動寫入過濾配置。
雖然這個工作不難,但是我估計你要維護的代理列表中可能有幾千個甚至上萬個ip地址,如果你的伺服器有大量使用這些代理的請求,那麼過濾這些ip對你的cpu是個考驗。如果只是很少部分的話,對運算資源有些浪費。當然如果過幾個月後,使用代理的訪問者發現訪問不了,可能就不用了,這時你可以考慮取消這些過濾策略。
③ PHP怎麼禁止代理訪問
要禁止代理訪問,首先你要分辨對方是否使用了代理。
一般來說可以直接通過HTTP協議頭中的REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR來判斷。
比如,沒有使用代理的情況下,後兩個一般是空的,第一個為真實IP;
而使用了一般的代理的話,前兩個會變成代理的IP,而第三個則是真實IP。
如果使用了一般的匿名代理的話,則三個都會變為代理的IP。
如果使用了欺騙型的匿名代理的話,前兩個還是代理的IP,而第三個會被偽造為一個隨機的IP。
如果使用了高級匿名代理的話,後兩個和沒有代理一樣,是空的,第一個則為代理IP。
以上,由於HTTP協議頭是很容易偽造的,一般很難判斷用戶是否使用了代理的,因為現在絕大多數人都是用的匿名代理,而一般要真的通過上面的方式能檢測到的,很可能是只能通過代理訪問網路的人,比如區域網之類。
不過如果你會JS的話,可以參考一下WebRTC,這個是HTML5帶的一個API,可以直接獲取到真實IP,然後發送回伺服器,再和REMOTE_ADDR比對一下,就可以准確知道是否使用了代理了(使用了代理,那WebRTC獲取到的肯定是和REMOTE_ADDR不一樣的)。但是這個辦法也僅限於使用了新版瀏覽器的用戶(必須支持WebRTC),並且沒有裝屏蔽WebRTC的插件(可以通過Chrome的插件來禁用WebRTC的,較舊的瀏覽器也可以在配置里停用WebRTC),並且,也不是完全不可以偽造,因為隨便寫個腳本放在瀏覽器里替換掉默認的WebRTC API,就可以提供一個虛假的IP(不過就目前來看還沒人這么干,大多數都是想辦法直接停用WebRTC),所以這個辦法也不是100%可靠的。
如果你可以准確判斷代理了,就簡單了,直接在代碼裡面die;掉就行了。