测试是否从本地文件调用了php include

测试是否从本地文件调用了php include,php,Php,我有一个包含一个函数的php include,我需要确保它只能通过包含在本地文件中而不是从任何外部源执行 这方面最好的测试方法是什么 -谢谢 -肖恩 更新: 谢谢,这里有更多的信息, -我无法将其移到webroot之外,我正在更新现有网站 -远程地址测试将始终返回客户端ip -我希望调用此文件的唯一方法是:包含一次“sendmail.php” 忘记测试。只需将文件保存在webroot之外 如果不能通过HTTP提供服务,那么就不能在外部使用它 (尽管如此,如果它只包含一个函数,并且没有自动执行的语

我有一个包含一个函数的php include,我需要确保它只能通过包含在本地文件中而不是从任何外部源执行

这方面最好的测试方法是什么

-谢谢 -肖恩

更新:

谢谢,这里有更多的信息, -我无法将其移到webroot之外,我正在更新现有网站 -远程地址测试将始终返回客户端ip
-我希望调用此文件的唯一方法是:包含一次“sendmail.php”

忘记测试。只需将文件保存在webroot之外

如果不能通过HTTP提供服务,那么就不能在外部使用它


(尽管如此,如果它只包含一个函数,并且没有自动执行的语句,那么任何外部请求都将以一个空白的HTTP响应结束,除非服务器开始以纯文本形式提供PHP文件)

如果您总是从同一个文件中包含并执行它,那么您可以在函数中进行URL检查

function curPageURL() {
     $pageURL = 'http';
     if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
     $pageURL .= "://";
     if ($_SERVER["SERVER_PORT"] != "80") {
         $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
     } else {
         $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
     }
     return $pageURL;
}


//Your included function:
function doSomething() {
    if (curPageUrl() == "http://www.yourwebsite.com/function.php") {
        ... execute code...
    }
}

您可以使用$\u服务器阵列返回调用者的IP

$callerIP = $_SERVER['SERVER_ADDR'];

您可以检查$callerIP是否为localhost。

我发现您的问题有两种情况:

  • 可以使用任何浏览器通过http访问该文件。在这种情况下,您可以在主应用程序中定义常量,然后将其选中,包括:

    主文件:

    define('MY_APP', true);
    
    包含的文件:

    if (!defined('MY_APP') || MY_APP !== true) {
      die('Access denied');
    }
    
  • 可以通过文件系统(例如,从附近的虚拟主机)访问文件。然后可以使用服务器名称和请求URI检查

  • 从本地文件,你的意思是只从你的服务器吗?嗯,有些代码真的很有用!重复:我喜欢函数名为doSomething()的情况。它违反了所有的编码标准!但谁在数呢;)剩下的答案很好,哈哈!我相信他的函数的名字是不同的。仅将此用作对其原始函数名的引用,我们不知道,因为他没有包含代码片段。:-)谢谢奥斯汀-正是我想要的。