【问题标题】:How can I only allow cron to be run on a PHP file during a certain time如何只允许 cron 在特定时间内在 PHP 文件上运行
【发布时间】:2011-12-14 12:14:37
【问题描述】:

我有一个 cron 作业,每天全时运行数次 (:00)。我怎样才能只允许 PHP 脚本在这段时间内运行?我不希望其他人能够运行我的脚本。以下是我的想法:

if (date('i', time()) > 2 || date('i', time()) < 58) {
  die;
}

有更好、更安全的方法吗?

【问题讨论】:

  • “其他人”?像谁?如果您的脚本仅由 cron 运行,则不应从 Web 访问它(如下面的@jeroen 所述),这消除了无法直接访问您的服务器的任何人。这只留下了可以直接访问您的服务器的人,您应该认识并信任他们(或者他们不应该直接访问您的服务器)。
  • 如果其他人可以运行该脚本,他们就可以阅读该脚本。这意味着他们可以复制它,取消您的时间限制,然后继续运行它。

标签: php cron


【解决方案1】:

如果你把你的 php 脚本放在你的 web 目录之外,那么只有你 / cron 可以运行它,没有其他人可以运行它。

有多种方法可以从 cron 运行 php 脚本,例如在 php 脚本的第一行添加类似这样的内容:

#!/usr/local/bin/php      /* depends on your server and configuration */

【讨论】:

  • 您为什么假设脚本一开始就位于可通过网络访问的位置?这如何防止在 shell 中访问服务器的其他用户运行脚本?
  • @ghbarratt 只是猜测,但这似乎合乎逻辑,否则 OP 可以将其移动到他或她的主目录,问题就已经解决了。
【解决方案2】:

cron 作业通常以 root 用户身份运行。你可以让你的脚本只能由 root 执行和读取:

sudo chown root script_for_root_only.php
sudo chmod 744 script_for_root_only.php

如果您不想使用 root,您也可以更改 crontab 中的命令以以特殊用户身份运行脚本。..

我认为我们可以假设您没有在 Web 可访问位置拥有该脚本。如果你这样做了,那么移动它。

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 2014-12-07
    • 1970-01-01
    • 2014-09-27
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多