【问题标题】:Make php files hidden from outside world使php文件对外界隐藏
【发布时间】:2012-10-12 20:53:20
【问题描述】:

我的 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 之外的文件夹

【问题讨论】:

  • 将它们存储在 webroot 之外?
  • php 文件还能互相通信吗?
  • 理想情况下,唯一应该存储在 webroot 中的是您的路由器;所有请求都应该被定向到路由器,它会负责包含位于您的 webroot 之外的代码。
  • 此外,只有类实现的文件在请求时不应输出任何内容并输出到浏览器,除非您的代码有点“脏”。
  • 要么将它们存储在您的 webroot 之外,要么使用您的 Web 服务器配置创建一个隐藏的 include 文件夹。这可能属于服务器故障,因为它不是编程问题。

标签: php mysql apache security


【解决方案1】:

我会尝试的第一件事:

  1. 将包含的文件移到文档根目录之外

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

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

可以通过使用常量来完成此操作:

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>
    

【讨论】:

  • 是的,我喜欢你的解决方案。谢谢,
  • 但是要做到这一点,我必须在每一行都写一个常量,不是吗?可以有任何 htaccess 解决方案吗?
  • @user1706482 为此,我建议先将所有包含的文件移动到子文件夹中。
  • 你也可以测试realpath($_SERVER['SCRIPT_FILENAME']) != __FILE__
  • @eggyal 有趣的方法 :) 根据路径长度和包含文件的数量,这可能会导致明显的减速,但不确定。
【解决方案2】:

尝试使用 .htaccess。

不是127.0.0.1这个ip,你需要输入你的服务器ip地址。

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

【讨论】:

  • 是的,我需要完全一样的东西。但是如何让它发挥作用呢?
  • 进入public_html文件夹,打开.htaccess文件,如果不存在则创建。
  • 谢谢,您的回答正是我所需要的。但是这样做会显示两种访问类型的禁止错误,即我无法登录禁止页面出现意味着即使内部文件也无法访问?
  • 您是否将 127.0.0.1 设置为本地服务器 ip?可以尝试将 / 放在 login_handle.php 之前。像这样:/login_handle.php
  • 输入 /,再次让 ser 和 php 脚本访问文件。
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 2013-04-15
  • 2015-10-24
  • 2023-01-03
  • 1970-01-01
  • 2011-05-09
  • 2011-03-26
  • 1970-01-01
相关资源
最近更新 更多