2013-07-13 90 views
-1

我想知道如果我的做法是既安全並實現文件引用的好方法。我知道您可以使用:PHP安全性目錄

include $_SERVER['DOCUMENT_ROOT'] . "includes/config.php" 

在PHP腳本中引用文件。但是,我認爲這將是一個安全漏洞,如果我用一個莊園是相同的呼叫像這樣:

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] ?>/images/image.jpg" /> 

由於我的基本文件目錄將是給前端用戶可見。爲了解決這個問題,我最終加入到我的config.php文件(每個頁面上執行)的命令,這是否:

chdir($_SERVER['DOCUMENT_ROOT']); 

這樣,我總是知道我需要從根引用和前端用戶將無法看到我的文件結構。這是一個好方法嗎?

預先感謝您!

+0

你錯過了一些基本的東西在這裏,看看我對這個類似問題的答案:http://stackoverflow.com/questions/17574224/define-a-rootpath-in-php/17574607#17574607 – jeroen

+0

我道歉,但我不不理解你對另一篇文章的迴應。我實現了這些更改,它適用於客戶端的兩個圖像以及PHP中的文件。你是否暗示存在安全問題? –

回答

1

我認爲這將是一個安全漏洞,如果我使用了一個莊園相同的呼叫像這樣:

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] ?>/images/image.jpg" /> 

這不是一個安全漏洞(*),它剛剛獲得」工作。 <img src>是由客戶端訪問的外部URL地址; DOCUMENT_ROOT是服務器腳本使用的內部文件地址。

文檔根是其對應於外部根URL(/)的文件系統路徑。因此,如果您的文檔根目錄爲/home/me/www-data,則上面給出的瀏覽器的圖像將爲src="/home/me/www-data/images/image.jpg",瀏覽器會詢問服務器的URL爲/home/me/www-data/images/image.jpg,服務器將在文檔根目錄:/home/me/www-data/home/me/www-data/images/image.jpg內查找該文件。由於想必是文件路徑不存在,服務器用404回覆,你會得到一個破碎的形象。

(*:嗯......除非你的文檔根目錄恰好有一個HTML特殊字符,比如<,這是不太可能的。但是,你總是要將任何變量值放入HTML頁面,以避免HTML - 註冊問題。)

chdir($ _ SERVER ['DOCUMENT_ROOT']);

這什麼都不做。 Web服務器自身提供相對於文檔根目錄的圖像 - 您的PHP腳本不會針對圖像請求運行。