2011-07-18 54 views
1

我把一些代碼在PHP文件的標題,以阻止代理:阻止代理與PHP

if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
    || ($_SERVER['HTTP_USER_AGENT']=='') 
    || ($_SERVER['HTTP_VIA']!='')) { 
     die("Don't use proxies, please."); 
} 

member.php我把上面的代碼和它的工作非常好,當有人要求example.com/member.php與HTTP代理此代碼會阻止它們,但是當它們請求example.com/member.php?action=login時,此代碼無法阻止它們!我該怎麼辦?提前致謝。

+1

代理自願發送「X-Forwarded-For」頭。如果他們不這樣做,您無法知道用戶是否在代理之後。這通常是這種情況,特別是在匿名代理(即不發送「X-Forwarded-For」頭部的代理)的情況下尤其如此。我不知道你的代理問題到底是什麼,但是你正在爲失敗的事業而戰。 – zneak

+0

1.'$ _SERVER ['HTTP_USER_AGENT'] =='''不會阻塞只使用代理的用戶,(另一方面)代理也可以發送用戶代理(如果他們喜歡的話)。 2.(只是好奇)爲什麼你想阻止使用代理的用戶?當他們想要使用代理時,我沒有看到真正的理由來禁止它。 – KingCrunch

+1

所有thos變量都可能被捲曲欺騙,唯一的方法是記錄違規的ips,然後在防火牆或.htaccess文件中阻止它們。 –

回答

0

一個空白的用戶代理並不意味着他們正在使用代理......有些人只是不喜歡廣播他們正在使用的瀏覽器/操作系統......至於爲什麼登錄腳本沒有得到阻止了爲什麼不在每個階段查看$ _SERVER中的內容。一個簡單的var_dump($_SERVER)將顯示一切,並告訴你爲什麼你試圖匹配不匹配。

+0

ummm ...上面的代碼是這樣的嗎? :if(isset(var_dump($ _ SERVER)(['HTTP_X_FORWARDED_FOR'])) ||($ _SERVER ['HTTP_USER_AGENT'] =='') ||($ _SERVER ['HTTP_VIA']!='') ){ die(「請勿使用代理,請。」); } – Jessica

+0

沒有。 '的var_dump($ _ SERVER); if(isset(yada yada yada)){...}' –