禁止直接访问PHP中的文件

时间:2013-06-18 18:53:11

标签: php apache .htaccess

我已经检查了问题disable access to included files,但我想知道这是否是最佳解决方案。

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

在研究和阅读我最初提到的帖子和其他与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 - 重定向所有对Bootstrap的调用并进行巧妙的过滤。

//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应用程序的直接访问控制系统?否则,这将是最安全的方法?最简单的?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

查看此处列出的所有选项IMO最好将这些文件放在public_html文件夹上,或者放在您的DOCUMENT_ROOT文件夹中,并包含../路径。然后它将可供您的PHP脚本使用,但对于Web请求将收到默认的404/ file not found错误。