繁体   English   中英

如何保护文件免受外界侵害?

[英]How to protect files from outside?

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

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

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

现在的问题是,您实际上可以使用地址访问显示表单的页面,即;

domain.com/mycms/includes/addpage.php

您会如何建议保护这一点?

注意:登录后,一切都必须正常进行,只是从外面可能不会显示该表格。 我可以检查该会话是否存在,但我想知道是否有更好和更容易的方法。

首先,如果要包含PHP文件,则实际上不应将其放在公共Web根目录下

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

例如:

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

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

旨在将您的文件放入

domain.com/ private /includes/addpage.php

然后从您的页面执行类似

include('../ private / includes / addpage');

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

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

另外,如果您使用某些框架或具有类(或包含)目录,则可以拒绝对整个目录的访问,如下所示(apache):

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

其他Web服务器还有其他禁止文件的方法。 如果您希望它具有通用性和便携性-Aron Rotteveel的建议是最好的。

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

如果有必要将私有文件保留在公用文件夹中,则可以使用CHMOD权限(例如700)对其进行保护

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM