2012-01-19 56 views
2

我如何檢查是否給定的URL是某一預定域內,說從API請求用戶註冊:我如何檢查給定的網址是否在某個域內? PHP

http://domain.com 

然後,他讓來自請求:提前

http://domain.com/script.ext?var=foo //this should validate true 

http://example.com/script.ext?var=foo //this should validate false 

http://www.domain.com/script.ext?var=foo //this should validate true also 

謝謝

+0

這是如何艱難 - 做請求的URL –

+0

抓鬥'gethostbyaddr($ _ SERVER [ 「REMOTE_ADDR」])的子字符串;'和比較,以'domain.com' – anubhava

+0

@AdrianCornish'HTTP://惡意。如果您只是使用子字符串,com/domain.com/something'將匹配'domain.com'。 – SoonDead

回答

13

使用parse_url()

if ('domain.com' == parse_url($url, PHP_URL_HOST)) 
{ 
    // do something awesome 
} 
+0

請注意,這會獲取整個主機名,而不僅僅是域名。 – Vallentin

1

我不確定我是否正確理解您的問題,但是如果您想查看請求來自哪裏,則可以使用http頭中提供的「http referer」字段。 (http://en.wikipedia.org/wiki/HTTP_referer)

我不是很擅長php,但我認爲你可以使用像$ _SERVER ['HTTP_REFERER']來獲得價值。該值是自動設置的,所以你只需要閱讀它。假設您通過單擊頁面「www.domain.com/referer.php」上的鏈接調用一個頁面「www.domain.com/page.php」,那麼該請求將具有referer字段「http ://www.domain.com/referer.php「,當您在」www.domain.com/page.php「中閱讀$ _SERVER ['HTTP_REFERER']時。

如果您通過直接在瀏覽器中輸入「www.domain.com/page.php」來申請,您會得到referer = null,如果您單擊www.anotherdomain.com上的鏈接轉到「www。 domain.com/page.php「,你會得到referer = http://www.anotherdomain.com

然後,您只需將此值的域部分與您允許的域/域進行比較即可。

相關問題