【问题标题】:Limiting php file to localhost only将php文件限制为仅本地主机
【发布时间】:2011-11-28 15:01:59
【问题描述】:

有没有办法限制 php 文件只加载到本地主机?

我在我的 index.php 文件中包含了一些 php 文件来拼接一个网页。假设我将 main.php 包含在我的 index.php 文件中。现在没有什么可以阻止任何人加载 main.php 文件并显示其内容。由于 main.php 文件被拼接到 index.php 文件中,所以单独看起来并不好。

是否有一些代码可以放在 main.php 文件中,这样如果 localhost php 文件中没有包含它就不会输出任何内容?

类似:

. . .

【问题讨论】:

  • 这通常是通过将包含的文件放在 Web 服务器的文档根目录之外并通过该路径包含它们来完成的,或者将它们放在防止被 Web 服务器查看的目录中(例如.htaccess 在阿帕奇)

标签: php


【解决方案1】:

如果您不希望远程访问某些内容,请不要将其放入您网站的文档根目录中。无论文档根设置如何,PHP 都会愉快地在文件系统上的任何位置包含()/需要()文件。

【讨论】:

    【解决方案2】:

    您还可以在 index.php 中定义一个常量/变量并在 main.php 中检查它。这也是Joomlas of the world 的做法。所以, DEFINE('MYVAR', 1);在 index.php 中。 Main.php 会有

    defined( 'MYVAR' ) or die( 'Direct Access to this location is not allowed.' );
    

    【讨论】:

    • 这将为我完成。检查了我自己的 Joomla 设置,它就在那里。现在我知道 _JEXEC 是干什么用的了。
    【解决方案3】:

    只需检查REMOTE_ADDR

    if ($_SERVER['REMOTE_ADDR'] == '<you>')
    

    【讨论】:

    • 如果您在服务器控制台上运行浏览器,则会失败。
    【解决方案4】:

    您可以尝试测试 $_SERVER['REMOTE_ADDR'] 的变量,但如果您的客户端通过与“127.0.0.1”相反的以太网 IP 地址连接,则可能无法返回您需要的结果

    您也可以尝试对 .htaccess 使用一些技巧,但您确实在上面放了一个 PHP 标记,这可能不是您想要做的。

    【讨论】:

      【解决方案5】:

      我发现的最简单的方法是使用这种方法:

      Index.php

      <?php
           define('VIA_INDEX', true);
           ...
      

      Main.php

      <?php
      
          if (false === defined('VIA_INDEX')) {
              //throw exception, re-route back to index etc.. etc...
          }
      

      如果用户调用 Main.php,它不会定义常量 VIA_INDEX,因此不会执行

      【讨论】:

        猜你喜欢
        • 2012-11-26
        • 2010-09-25
        • 2011-08-15
        • 2012-03-07
        • 1970-01-01
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多