2011-08-12 63 views
1

我有一個簡單的函數來檢查網站標題:如何避免用戶通過本地主機或127.0.0.1或自我IP到loadHTML?

$doc = new DOMDocument(); 
@$doc->loadHTMLFile($aUrl); 
$xpath = new DOMXPath($doc);  

if(!isset($xpath->query('//title')->item(0)->nodeValue)) 
{    
    return FALSE; 
}        

return $xpath->query('//title')->item(0)->nodeValue; 

但是,如果用戶通過本地主機或127.0.0.1,他們可以得到我的主機的數據,我可以做一個簡單的指南,允許用戶輸入這些值,但有時候,我不能保證內部的IP,比如192.168.11.2,我該如何保護網站不會查詢回我的主機?謝謝。對於外部用戶

+0

您允許用戶以供應'$ aUrl'任何URL價值?這是非常危險的 –

+0

@邁克爾根本沒有。這就是代理人一直在做的事情。 – phihag

+0

@phihag代理通常有一個可接受域的白名單來代理 –

回答

0

加入這一行begining

if(preg_match("/^(http:\/\/)(localhost|127.0.0.1|{$_SERVER["SERVER_ADDR"]}|{$_SERVER["HTTP_HOST"]}|www.yourhost.net)/i", $aUrl)) die('error'); 

它可以幫助

+0

但他們仍然通過192.168.11.2訪問我:( – Tattat

+0

$ _SERVER [「SERVER_ADDR」]包含192.168.11.2(或您的實際服務器地址),請參閱http://php.net/manual/en/reserved.variables。 server.php – SergeS

+0

我得到的結果是127.0.0.1而不是192.168.11.2。但我可以從192.168.11.2獲得訪問:( – Tattat

-1

127.0.0.1或本地主機將自己的電腦/主機 設定的條件,在這裏你檢查主機名不$ _ SERVER [「SERVER_ADDR」]或$ _ SERVER [「SERVER_NAME」]

+0

不,他正在用curl發送來自服務器的請求。 – phihag

相關問題