【发布时间】:2011-11-24 14:16:33
【问题描述】:
在我的网站上,我使用了很多包含,大多数包含应该只能供网络服务器访问,而不能供世界其他地方访问。因此,如果我在我网站的页面中包含“../include_map/file.php”,则世界上其他用户应该无法使用 URL 请求(“website.com/include_map/file.php”) .是否有可能使用包含文件来保护地图,以便只有网络服务器可以包含这些文件?
【问题讨论】:
在我的网站上,我使用了很多包含,大多数包含应该只能供网络服务器访问,而不能供世界其他地方访问。因此,如果我在我网站的页面中包含“../include_map/file.php”,则世界上其他用户应该无法使用 URL 请求(“website.com/include_map/file.php”) .是否有可能使用包含文件来保护地图,以便只有网络服务器可以包含这些文件?
【问题讨论】:
PHP 可以包含来自服务器硬盘驱动器上各处(也包括非公共目录)的文件。
例如,如果您的 htdocs 位于 /var/www/domain/htdocs/ 您还可以包含位于 /var/www/domain/include_map 的文件,而不允许网络服务器从那里读取(如果配置正确)。
然后,您可以使用 www.yourdomain.com/../include_map/file.php 进行测试以访问该文件。 如果您仍然可以这样访问它,则需要注意您的网络服务器配置,以防止其他人读取您的日志和其他内容。
另一种方法是通过 .htaccess 或 apache config 拒绝对目录的访问。 php 仍然可以包含文件,而用户无法从 Internet 访问它们。
在 apache 配置中,您可以执行以下操作:
<Directory /inlcude_map>
Order Deny,Allow
Deny from all
</Directory>
在你可以写的 .htaccess 文件中
Order Deny,Allow
Deny from all
.htaccess 文件应位于您要保护的目录中。请咨询您的服务器提供商,了解哪种方式最适合您。如评论中所述,您必须首先确定 .htaccess 是否适合您。
【讨论】:
你可以按照zuloo说的去做。如果您希望它在任何情况下都能正常工作,您可以为此使用一个常量。
文件包括:
define('IS_APP', true);
require_once('some/file/to/include.php');
// your code here
包含的文件:
if(!defined('IS_APP')) {
die('No direct access');
}
// your code here
【讨论】: