我有一个包含一个函数的php包含,我需要确保它只能通过包含在本地文件中而不是从任何外部源执行。
测试此方法的最佳方法是什么?
-Thanks -Sean
更新:
谢谢,这里有更多信息, - 我无法将其移到webroot之外,我正在更新现有网站 - 测试REMOTE_ADDR将始终返回客户端IP - 我想要调用此文件的唯一方法是:include_once“sendmail.php”;
答案 0 :(得分:2)
忘记测试。只需将文件保留在 webroot。
如果无法通过HTTP提供,则无法在外部使用。
(虽然,如果它只包含一个函数,并且没有自动执行的语句,那么除非服务器开始以纯文本形式提供PHP文件,否则任何外部请求都将以空白HTTP响应结束)
答案 1 :(得分:2)
我看到了两个问题:
可以使用任何浏览器通过http访问文件。在这种情况下,您可以在主应用程序中定义CONST,然后将其包括在内:
主文件:
define('MY_APP', true);
包含文件:
if (!defined('MY_APP') || MY_APP !== true) {
die('Access denied');
}
答案 2 :(得分:1)
如果您始终在同一文件中包含并执行它,则可以在函数中进行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...
}
}
答案 3 :(得分:1)
您可以使用$ _SERVER数组返回调用者的IP。
$callerIP = $_SERVER['SERVER_ADDR'];
您可以检查$ callerIP是否为localhost。