我可以保护我的cron脚本从远程用户?(Can I protect my CRON scripts

2019-08-02 02:16发布

我目前的工作,其中包括使用cron作业新项目。

cron的脚本基本上运行的SQL查询,生成数据到一个文件,并通过FTP将该文件发送到另一台服务器。

该脚本是一个活的网站(www.website.com/sendOrders.php)

我没有看到任何安全问题或威胁,我认为这是极不可能的,任何人都可以找到服务器上的PHP脚本。 不过,我不希望脚本任何外人来执行。

有没有一种办法可以保护这个脚本?

感谢彼得

Answer 1:

您可以将您的“秘密文件”到子文件夹,然后创建一个.htaccess文件在那里,阻止访问来自大家的是文件,除了正在运行的cronjob服务器。

例:

DENY FROM ALL
ALLOW FROM 123.123.123.123

如果你有shell访问也可能把脚本访问的文件夹外,并直接通过命令行或的cronjob这样运行了: php script.php



Answer 2:

为什么不只是移动该脚本的服务器的Web根之外,从CLI执行呢? 这是没有执行它别人的机会。

如果你必须有它的根目录(和应该没有理由吧),只要确保为请求的客户端就是你正在运行它的服务器,它应该是绰绰有余。



Answer 3:

这似乎是愚蠢的。 为什么有cron的machine A通过HTTP上调用脚本machine B ,当你可以简单地B机的本地调度系统(在任何操作系统恰好是)就工作本身?

然后,你可以有局促的地方脚本,这不是通过HTTP访问,使您的安全问题completley没有实际意义。



Answer 4:

如果文件是不应该被完全锁定的文件夹中,包裹在这些行<Files whatever.php>...</Files>

<Files "cron.php">
  Order deny,allow
  Allow from name.of.this.machine
  Allow from another.authorized.name.net
  Allow from 127.0.0.1
  Deny from all
</Files>


Answer 5:

这里是我的解决方案:

cron.php检查,如果一些特定头中发送

cron.php

if (secure_cron_script() === false) {
    echo 'Unauthorized';
    return;
}
echo 'OK';

的functions.php

function secure_cron_script () {
    if (DEBUG)
        return true;

    $http_headers = getallheaders();
    if (empty($http_headers['X-My-Cron-token'])
    || $http_headers['X-My-Cron-token'] !== SECURE_CRON_TOKEN) {
        return false;
    }
    return true;
}

如何调用的cron的卷曲度:

curl --header "X-My-Cron-token: 321123321sd"  https://example.com/cron.php

没有IP限制。 没有GET / POST。 如果开发人员模式,跳过限制。 无论你想你可以把脚本。



文章来源: Can I protect my CRON scripts from remote users?