2012-07-07 122 views
0

我試圖在網絡上的其他地方搜索此地址。訪問根目錄之外的php文件最安全的方法是什麼?

似乎無法得到一個堅定的答案,表明它是最安全的方式。

我知道最安全的方法是在可能的情況下,不要在可以幫助的根目錄中包含任何php文件。

所以,我想知道的是,如果我想包括一個PHP文件存儲在根目錄外面,比如說,在另一個目錄中,對我來說最安全的方法是什麼?

+0

通過'root'你的意思是你可公開訪問的文件夾又名'public_html'? – F21 2012-07-07 10:40:47

+0

是的,所以有人可能進入並干擾損壞的文件夾 – Kalcoder 2012-07-07 10:45:08

回答

1

這不會直接回答您的問題,但也許它會讓您以不同的方式查看您的應用程序結構。我認爲這是一個誤解,它是不安全包含來自您的webroot之外的文件。

相反,很多人都有一個結構,其中大多數不是所有的應用程序邏輯都在public_html或類似的目錄之外。尤其適用於所有路由器類型的系統。

你可以有一個結構是怎樣的:

var 
    www 
     public 
      something.js 
      happy.jpg 
      index.php 
     application 
      bootstrap.php 
      AwesomeClass.php 
      Router.php 

現在你index.php你可以制定出真正您的應用程序。

喜歡的東西:

define('WEB_ROOT', __DIR__); 
define('APP_ROOT', dirname(__DIR__)); 
define('PHP_ROOT', APP_ROOT . DIRECTORY_SEPARATOR . 'application'); 

你現在有指向你的公共html目錄的實際文件系統路徑和你的PHP文件是常量,現在可以安全地包括像文件:

include(PHP_ROOT . DIRECTORY_SEPARATOR . 'bootstrap.php');

這是非常安全的,許多人都有這樣的應用程序結構。如果你沒有任何.htaccess或類似的巫術,那麼它也會阻止人們瀏覽任何你正在鋪設的php文件。

+0

有趣的是,試驗前兩個定義在那裏,但問題....如何DIRECTORY_SEPARATOR是否工作?它有什麼作用? – Kalcoder 2012-07-07 13:55:29

+0

@Kalcoder:它是一個操作系統特定的常量。在Windows上它是'\',在* nix/BSD上是'/'。所以你的文件路徑總是有正確的。 – Leigh 2012-07-07 14:20:23

+0

啊我看到了,所以基本上它會確保它或者需要是例如home/somefolderoutsideofpublic/fileimgoingtouse.php或home \ somefolderoutsideofpublic \ fileimgoingtouse.php,確定很酷很有意義,謝謝! – Kalcoder 2012-07-07 14:24:39

0

從你的問題,我相信你想防止目錄travesal(人們試圖讓你的腳本包括/ etc/passwd等)。

在請求的路徑上使用realpath。這應該擴大了所有的../..

一旦做到這一點,你檢查由realpath()針對白名單返回的結果或將其限制在自己的目錄,並檢查file_exist()file_exist('myfolder' . DIRECTORY_SEPERATOR . $resultFromRealPath())

+0

可能,現在閱讀...... – Kalcoder 2012-07-07 11:18:18

相關問題