我正在构建一个应用程序并使用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');
?>
这样安全吗? 如果它是安全的,它是否符合实践?
答案 0 :(得分:1)
这可能是不安全的。取决于PHP可以打开的所有其他PHP文件。如果所有这些都是不执行任何操作的类文件,那么您就是安全的。但是,如果他们中的任何一个自动执行某些事情......也许不会。
假设您在文件夹中包含PHP文件:
/secured/file.php
让我们说该文件夹有一个.htaccess,禁止任何人直接导航到该页面。或者更好的是,让我们说它在你的根目录之上。但是,黑客将“../secured”作为mod
和“file”的值发送为page的值。在这种情况下,PHP可能允许该人包含该文件,如果它自行执行,则可能会产生意想不到的后果。
这就是Zend Framework需要显式配置所有MVC路径的原因。其他框架允许一些动态包含,但它们经常做类似的事情,如将“Controller.php”附加到字符串的末尾,这确保包含的文件必须是一个控制器...因此意图包含在这样的方式。
说到安全性,你可以做的最好的事情就是确保你......拥有整个服务器的所有知识......无法打开任何你不想打开的文件由别人。如果你无法获得代码,知道那里有什么文件,那么你已经实现了一些不错的(虽然可能仍然没有完美无缺)安全性。