使php文件对外界隐藏

时间:2012-10-22 23:56:54

标签: php mysql apache security

我的php网站有多个php文件,其中一些用于用户界面,其中一些是帮助文件(这些文件通过数据库相互通信以返回结果)。现在我需要用户不能从他们的直接URL中执行帮助文件。

e.g. mydomain.com/login.php   ---------- (Interface file, must be accessible to user)
     mydomain.com/login_handle.php   ----(Healper file, must not be accessible to user)

所以我需要的是用户可以执行和浏览mydomain.com/login.php但必须能够执行mydomain.com/login_handle.php,而login.php和handle_login.php保持通信并且可以相互访问。谢谢,

编辑抱歉,我正在使用共享托管,除了public_html 之外没有其他文件夹。

2 个答案:

答案 0 :(得分:4)

我会尝试的第一件事:

  1. 将包含的文件移出文档根目录

  2. 将包含的文件移到另一个文件夹中,并使用.htaccess保护它。或者,将您的包含文件重命名为.inc并以此为基础创建规则。

  3. 确保包含的文件不输出任何内容;这不是很安全,但如果你的文件只包含函数,类定义等而不产生任何输出,它只会显示一个空页。

  4. 通过使用常量可以实现对此的hackish方法:

    的index.php

    <?php
    
    define('MY_CONSTANT', '123');
    
    include('helper.php');
    

    helper.php

    <?php
    
    if (!defined('MY_CONSTANT')) { exit; }
    
    // we were called from another file
    // proceed
    

    修改

    上面的数字2方法可以通过以下方式完成:

    1. public_html下创建一个文件夹,例如includes/

    2. 将所有应包含的文件移至此文件夹

    3. 在里面添加以下.htaccess

      <FilesMatch "\.php$">
      Order allow, deny
      Deny from all
      </FilesMatch>
      

答案 1 :(得分:1)

尝试使用.htaccess。

而不是127.0.0.1这个ip,你需要把你的服务器IP地址。

<Files login_handle.php>
    Order Allow,Deny
    Deny from all
    Allow from 127.0.0.1
</Files>