2017-06-12 106 views
0

我想檢測一個人是否使用代理訪問我的網站,如果它是真的,那麼限制他訪問該網站。我在某處找到了這段代碼,但我不確定它是否會起作用。有人可以解釋一下它是否足夠,或者我是否需要添加其他任何東西以及這段代碼如何工作?通過PHP檢測代理

if (
     $_SERVER['HTTP_X_FORWARDED_FOR'] 
    || $_SERVER['HTTP_X_FORWARDED'] 
    || $_SERVER['HTTP_FORWARDED_FOR'] 
    || $_SERVER['HTTP_CLIENT_IP'] 
    || $_SERVER['HTTP_VIA'] 
    || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554)) 
    || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30)) 
{ 
    exit('Proxy detected'); 
} 

感謝您的幫助:)

+0

這可能就夠了。你無法檢查所有'REMOTE_PORT's。 'fsockopen'行動可能將您的網站標記爲mallware。 – FieryCat

+0

爲什麼端口80被視爲代理?我不會諮詢'http_'頭。 – chris85

回答

1

端口掃描是不是很準確,也不能很好地工作。很多代理服務器不會在您正在查看的標準化端口上運行。最重要的是,僅僅因爲某人在端口80上運行了某些東西,並不意味着它是代理IP。

總而言之,代理/ VPN檢測是一個複雜的問題需要解決。有一個由GetIPIntel製作的免費API,它使用機器學習和概率論技術來生成IP是代理/ VPN的可能性的評分。 Maxmind也提供了一個,但它被視爲「傳統」服務,它不是免費的。

0

您的算法存在缺陷:掃描HTTP/s端口80和443,這對所有服務器都非常常見。某些VPN提供商確實正在使用這些端口來隱藏他們的服務。

您應該採用黑名單方法,您可以根據已知的代理服務器或VPN列表查詢訪問者IP地址。一個免費的數據庫正在使用IP2Proxy LITE,這是來自IP2Proxy的每日更新列表的子集。也可以使用Web服務,這可以減少日常數據庫更新。產品頁面提供免費樣品代碼。