我可以保护远程用户的CRON脚本吗?

时间:2012-10-29 00:22:01

标签: php permissions cron file-permissions user-permissions

我目前正在开展一个涉及使用CRON工作的新项目。

CRON脚本基本上运行SQL查询,将数据生成到文件中,然后通过FTP将该文件发送到另一台服务器。

该剧本位于实时网站(www.website.com/sendOrders.php)

我没有看到任何安全问题或威胁,我认为任何人都不太可能在服务器上找到PHP脚本。但是我不希望脚本被任何外人执行。

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

由于 彼得

5 个答案:

答案 0 :(得分:7)

您可以将“秘密文件”移动到子文件夹中,然后在其中创建一个.htaccess file,阻止所有人访问该文件,但运行Cronjob的服务器除外。

示例:

DENY FROM ALL
ALLOW FROM 123.123.123.123

如果您有shell访问权限,您可能还会将脚本放在可访问文件夹之外,并通过命令行或cronjob直接运行,如下所示:php script.php

答案 1 :(得分:3)

为什么不将脚本移到服务器的Web根目录之外并从CLI执行呢?这是没有其他人执行它的机会。

如果你必须在webroot中拥有它(并且没有理由),只需确保请求的客户端是你正在运行它的服务器,它应该绰绰有余。

答案 2 :(得分:2)

这看起来很傻。为什么cron machine Amachine B上通过HTTP调用脚本,当你可以简单地让机器B的本机调度系统(无论它碰巧是什么操作系统)自己完成工作?

然后,您可以将脚本隐藏在某些无法通过HTTP访问的地方,并使您的安全问题无法解决。

答案 3 :(得分:0)

如果文件位于不应完全锁定的文件夹中,请将这些行包装在<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>

答案 4 :(得分:0)

这是我的解决方法:

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;
}

如何使用curl调用cron:

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

无IP限制。没有GET / POST。如果为开发人员模式,则跳过限制。您可以将脚本放置在任意位置。