使 php 文件只能通过计划任务访问

使 php 文件只能通过计划任务访问

我有几个 php 文件,旨在仅从计划任务运行。我不希望任何人通过在浏览器中输入 URL 或其他方式访问这些文件... 有没有办法让此文件仅供计划任务访问?我使用 plesk 控制面板...

答案1

您想创建一个.htaccess包含一些规则的文件来限制对这些文件的访问。这将影响 Apache 通过 http 提供文件,但不会影响本地服务器以及运行 php 代码来访问文件等操作。

Apache 文档有详细信息文件在此处阻止此处拒绝指令。Anthonysomerset 抢先了一步例子在他的回答中。

答案2

如果您的计划任务使用命令行 php,那么您可以使用 htaccess 来禁止访问您的 php 文件所在的目录(或 php 文件本身)。

htaccess 块看起来类似于:

<Files yourphpfile.php>
    order allow,deny
    deny from all
</Files>

只需将其放入包含 php 文件的目录中的 .htaccess 文件中即可。

答案3

您只需将相关文件放在 DocRoot 之外即可(例如,放在/home/yourusername/cronscripts而不是/home/yourusername/public_html/cronscripts)。这样您的 Web 服务器就无法访问文件*

.htaccess也是一种常用方法,并且比第一种方案更有优势,即使您不使用命令行 PHP 来触发作业,它也能正常工作。通常,您会使用AllowDeny语句来限制哪些源 IP 地址可以到达给定的代码段。

作为最后的选择,或者如果您需要从多个位置或 IP 地址不断变化的位置访问脚本,请考虑使用共享密钥,通过如下代码:

if ( !isset($_GET['secretpass'])
  || $_GET['secretpass'] != 'hmAPcrkqjDhMkJw' )
{
    //Try to be fancy ("HTTP" response is for mod_php, "Status:" is for FastCGI)
    header("HTTP/1.1 404 Not Found");
    header( "Status: 404 File Not Found" );
    exit(0);

    //Or, if you'd rather, you can just:
    die( "Unauthorized access." );
}

然后,当你调用脚本时,只有你知道要添加到末尾的正确参数(http://somehost.com/somescript.php?secretpass=hmAPcrkqjDhMkJw)。

*当然,除非您明确设置单独的脚本或符号链接来执行此操作,但现在我们只是在吹毛求疵。

相关内容