2013-05-21 74 views
1

我無法讓我的PHP頁面只在服務器本身請求時才運行。如何限制我的PHP腳本只在本地主機請求時運行?

這就是我現在所擁有的:

if ($_SERVER['SERVER_ADDR'] == $_SERVER['REMOTE_ADDR']) { 
     //process page 
} else { 
     $this->redirect('http://' . $_SERVER['HTTP_HOST'] . '/404'); 
} 

然而,當我捲曲它,它不會給任何錯誤或在所有返回任何東西。如果我刪除檢查,它會按預期吐出HTML。

我試着迴應這兩個值,分別得到了192.168.1.186和192.168.1.225。我意識到他們不同(這是由服務器本身運行),但我該如何解決它?此代碼是從this S.O answer

+1

很少的選擇,但我會用.htaccess鎖定它,如果你不能把它放在web根目錄以外(總是選項1) – 2013-05-21 21:53:27

+0

你如何訪問腳本?這可能會告訴我們爲什麼你獲得不同的IP地址。另外,是否有一個原因,你不使用CLI,而不是試圖通過本地瀏覽器訪問它? – Devon

回答

0

您的問題的標題意味着我可以提供一個答案,不完全符合您的問題的正文。

我對此的迴應是,將您的整個腳本放在一個巨大的if聲明中似乎有點不安全,無法維護。

如果其他計算機可以運行腳本(比如通過網絡訪問它),則需要這樣的警衛。

但是,如果服務器是唯一可以運行腳本的機器,爲什麼不把它放在只有服務器可以訪問的地方呢?例如,一個目錄級別位於Web可訪問的目錄之上或具有700權限的子目錄中。或使用.htaccess限制訪問。

看起來既安全又可維護。

+0

我試圖使用.htaccess來限制它,但腳本依賴於框架中的幾個控制器(CakePHP),因此這些控制器僅在我點擊URL並通過路由時實例化。我在htaccess中將URL限制爲localhost的嘗試失敗。 – theintellects

0

使用服務器配置來限制文件訪問會更容易,更好。您可以例如使用一個.htaccess文件在你指定的目錄與這些內容:

order deny,allow 
deny from all 
allow from 127.0.0.1 

否認,除了從127.0.0.1(本地主機)的所有流量。當有人試圖從另一臺計算機訪問這些文件時,這將返回403錯誤。

相關問題