2015-02-09 58 views
-1

我正在構建一個應用程序並使用index.php作爲和不同模塊的入口點。我注意到SugarCRM這樣做,它似乎是一個好主意。應用程序入口點

的URL看起來這 http://www.mypage.com/index.php?mod=log&pag=login

國防部是模塊和PAG是頁面

在index.php相線這樣的:

<?PHP 

define('INCLUDE_CHECK',true); 

// Class Loader 
require ('app/inc/app_autoload.php'); 

// HTML Header with js and css links 
require ('header.php'); 

// Content Page 
$url_module = $_GET["mod"]; 
$url_page = $_GET["pag"]; 

$content = $url_module."/".$url_page.".php"; 
// For the above URL $content = log/login.php 

if (!file_exists ($content)) { 
    require ($content); 
    }else{ 
    // Handle Error 
} 

// Footer 
require ('footer.php'); 

?> 

這是安全? 如果安全,是否符合實踐?

回答

1

這可能是不安全的。取決於PHP可以打開的所有其他PHP文件。如果它們都是不執行任何操作的類文件,那麼你是安全的。但是,如果他們中的任何一個自動執行某些事情......也許不會。

假設你有一個文件夾中的PHP文件:

/secured/file.php 

而且我們假設該文件夾具有從直接導航到該頁面禁止任何一個.htaccess。或者更好的是,假設它位於根目錄之上。然而,黑客發送「../secured」作爲mod的值,「file」作爲頁面的值。在這種情況下,PHP可能允許該人包含該文件,如果該文件自行執行,則可能會產生意想不到的後果。

這就是爲什麼Zend Framework需要顯式配置所有MVC路徑。其他框架允許一些動態的包含,但他們經常做一些事情,比如在該字符串的末尾附加「Controller.php」,這確保了包含的文件必須是Controller ...並且因此意圖被包括在這樣的辦法。

當涉及到安全性時,您可以做的最好的事情是確保您...具有整個服務器的所有知識......無法打開任何您不想要的文件被別人打開。如果你不能得到代碼來完成它,知道哪些文件在那裏,那麼你已經實現了一些體面的(儘管可能仍然不完美)安全性。

相關問題