应用程序入口点

时间:2015-02-09 01:36:05

标签: php

我正在构建一个应用程序并使用index.php作为不同模块的入口点。我注意到SugarCRM这样做,看起来好像是个好主意。

网址如下所示 http://www.mypage.com/index.php?mod=log&pag=login

mod 是模块, 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 个答案:

答案 0 :(得分:1)

这可能是不安全的。取决于PHP可以打开的所有其他PHP文件。如果所有这些都是不执行任何操作的类文件,那么您就是安全的。但是,如果他们中的任何一个自动执行某些事情......也许不会。

假设您在文件夹中包含PHP文件:

/secured/file.php

让我们说该文件夹有一个.htaccess,禁止任何人直接导航到该页面。或者更好的是,让我们说它在你的根目录之上。但是,黑客将“../secured”作为mod和“file”的值发送为page的值。在这种情况下,PHP可能允许该人包含该文件,如果它自行执行,则可能会产生意想不到的后果。

这就是Zend Framework需要显式配置所有MVC路径的原因。其他框架允许一些动态包含,但它们经常做类似的事情,如将“Controller.php”附加到字符串的末尾,这确保包含的文件必须是一个控制器...因此意图包含在这样的方式。

说到安全性,你可以做的最好的事情就是确保你......拥有整个服务器的所有知识......无法打开任何你不想打开的文件由别人。如果你无法获得代码,知道那里有什么文件,那么你已经实现了一些不错的(虽然可能仍然没有完美无缺)安全性。