2013-06-18 105 views
0

我已经检查了问题disable access to included files,但我想知道这是否是最佳解决方案。禁止直接访问PHP中的文件

上下文:我正在为我的PHP框架构建一个引导类,并且意识到这个安全问题有多种解决方案。

研究和阅读的帖子就像我在第一次和其他相关的htaccess提到的,我认为有三种基本类型的解决方案:

1 - 检查恒定的(如在后我联系)

if(!defined('THIS_IS_NOT_A_DIRECT_ACCESS')) { 
    header('HTTP/1.1 404 Not Found'); 
    include('./../error/404.php'); 
    die; 
} 

或者

require('../error/include_file.php'); 
// 
if(!defined('THIS_IS_NOT_A_DIRECT_ACCESS')) 
{ 
    header('HTTP/1.1 404 Not Found'); 
    include('404.php'); 
    die; 
} 

2 - 重定向到引导所有来电,使一个聪明的筛选。

//Something like 
// if $urlRequested it's a file 
    // Go to Error 
// else if $urlRequested it's not a controller 
    // Go to Error 
// else 
    // Execute Controller Logic. 

3 - 设置htaccess。

# Redirecting calls for non-directories, files or links 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.+)$ index.php?url=$1 [QSA] 

# Redirecting the rest of the calls to the error page. 
RewriteRule ^(.+)$ index.php?url=error/404 [QSA] 

我个人认为,解决方案3是最有趣的,但我非常新的.htaccess的控制,所以我不知道这是一个安全的解决方案。

对于纯粹主义者和极简主义者,这里的问题是: 这些(这三个例子)是Apache-PHP应用程序的直接访问控制系统吗?否则,这将是最安全的方法?最简单的?

+0

就标准和优雅而言,选项3无疑是更好的方法。 – phpisuber01

回答

0

这是一个有争议的话题,但.htaccess规则适用于该特定目录上的所有文档。在应用1或2时,您可能必须在每个文件中包含该部分。

0

看看这里列出的所有选项,IMO更好的办法是将这些文件放在public_html文件夹的上面,或者是你的DOCUMENT_ROOT文件夹,并且包含../路径。然后它将可用于您的PHP脚本,但对于Web请求将得到默认的404/ file not found错误。