保持PHP包括安全

时间:2011-11-14 20:22:20

标签: php security

我的网站文件结构目前如下所示:

  • marketplace.php
  • cats.php

在marketplace.php上我有4个类别链接到$_GET变量(例如marketplace.php?cat = [1-4])。

在marketplace.php脚本的顶部,我有一个if语句,用于查找cat变量,检查它是否大于零,依此类推。

如果cat包含大于零的数字,则它将包含cats.php,然后根据该类别编号显示数据。

如何制作以便人们无法通过在浏览器中输入cats.php来进行播放?

4 个答案:

答案 0 :(得分:5)

cats.php移出文档根目录,但将其保留在包含路径中。

答案 1 :(得分:1)

如果我正确地提出了您的问题,您希望限制用户访问包含的文件(核心文件)。

您可以通过.htaccess限制它们,或者最终定义一个常量(IN_APP),它将在包含的每个文件中进行检查。如果未定义常量,则仅向用户(404)发出错误,指出该页面不存在

答案 2 :(得分:0)

有几种方法可以做到这一点。如果您的服务器上启用了.htaccess,您可以使用它来阻止对cat.php的访问,或阻止访问整个文件夹并将所有包含放在那里。

您也可以将cat.php放在网络根目录之外(public_html以上或者您的文件夹被调用)。

答案 3 :(得分:0)

最常见也很简单的方法。在主文件中定义常量

define('MY_APP_IS_RUNNING', true);

通过添加

来保护包含
if(!defined('MY_APP_IS_RUNNING') {
   die('This is a include file not for public access');
}

有点旧学校,但有效。

修改

基本思想是,所有包含/私有文件都依赖于您在公共脚本中定义的常量。当且仅当定义了此常量时,您的包含才会执行。

在marketplace.php中你会写

define('MY_APP_IS_RUNNING', true);
include_once 'cat.php';

并且你的cat.php将简单地查看是否定义了'MY_APP_IS_RUNNING'。这将为您的脚本添加基本安全性,并防止直接外部调用。