如何保护外部文件?

时间:2011-03-28 12:43:04

标签: php security

我自己制作了一个非常小的CMS。登录后,会话设置。

CMS包括某些图像,php页面等。

这些页面还可能包含将数据添加到数据库的表单。

现在的问题是你实际上可以使用一个地址来到显示表单的页面,即;

domain.com/mycms/includes/addpage.php

你会如何建议保护这个?

  

注意:当我登录时,一切都必须工作,只是从外面它可能不会显示表格。我可以检查会话是否存在,但我想知道是否有更好更简单的方法。

4 个答案:

答案 0 :(得分:8)

首先,如果你要包含PHP文件,你真的不应该把它们放在公共网络根目录

如果无法做到这一点,另一种方法是在index.php定义常量(假设您将此作为主要入口点)并检查此常量是否已设置在每个包含文件中,以防止直接访问这些文件。

例如:

// index.php:
define('INDEX_LOADED', true);

// /includes/addpage.php:
if (!defined('INDEX_LOADED')) die('no direct access allowed');

答案 1 :(得分:1)

旨在将您的文件放入

domain.com/的私有 /includes/addpage.php

然后从你的页面做  

之类的东西

包括( '../私人/包括/ addpage');

答案 2 :(得分:1)

我总是使用扩展名.inc.php来处理不应该从外部访问的PHP文件。然后我否认从外面可以看到扩展名。对于apache,您可以在主目录中的.htaccess文件中执行此操作:

<Files ~ "\.inc\.php$">
  Order allow,deny
  Deny from all
</Files>

此外,如果您使用某个框架或者您有一个类(或包含)目录,则可以拒绝访问整个目录(apache):

<Location ~ "^/(classes|framework)"
    Order allow,deny
    Deny from all
</Location>

其他网络服务器有其他方法可以禁止文件。如果你想要它通用和便携 - Aron Rotteveel的建议是最好的。

您可以保留仅包含类声明的文件不受保护 - 如果它们从外部运行,则不会运行任何代码。确保主机关闭的php ini设置关闭

答案 3 :(得分:0)

如果有必要将私人文件保存在公共文件夹中,您可以使用CHMOD权限(如700

)保护它