【问题标题】:Ensure a PHP script is only ever run as a cron job?确保 PHP 脚本仅作为 cron 作业运行?
【发布时间】:2011-05-02 13:11:59
【问题描述】:

我如何确保用户不能运行 PHP 脚本并且它只能作为 cron 作业的一部分运行?

【问题讨论】:

    标签: php cron


    【解决方案1】:

    您可以在 crontab 中设置环境变量。像IS_CRON=1 这样的行可以放在你的crontab 的开头,然后在你的php 程序中检查get_env("IS_CRON") == 1

    当然,您还应该使用文件权限,因为它们不容易被绕过。如果这是作为 root 的 cron 的一部分运行的,chown root:root yourscript.phpchown 700 yourscript.php


    正如 ircmaxell 所说,假设您不需要 root 权限来执行您正在做的事情,那么最好以 root 用户以外的用户身份运行。我只是在猜测你的设置。

    【讨论】:

    • 这看起来是一个完美的解决方案...我对 cron 作业有点陌生...我将如何设置 IS_CRON=1 部分?
    • @Starlin,只需将该行放在您的 crontab 文件的开头
    • 用户也可以设置环境变量。
    • @Wooble 这就是我提到文件权限的原因。有了这些文件权限,只有 root 可以运行它。环境变量将防止意外运行它。如果其他具有 root 访问权限的人想要故意运行它,这是一个有争议的问题,因为他们总是可以自己修改代码。
    • 是的,但您也可以将其设置为您希望的任何其他用户(因此这不是安全问题)......那么唯一可以访问它的人是那些拥有该用户密码或 root 的人...以 root 身份运行它可以让任何妥协(或恶意编码器)在您的服务器上完全运行...不要放弃 root 访问权限,让他们为它工作...
    【解决方案2】:

    我建议在你的 crontab 中设置一个环境变量,然后在你的 PHP 脚本中检查它

    【讨论】:

    • 不是我的,但我会说“为了安全起见”。虽然您的建议会阻止 意外 执行,但只要看一眼脚本就会告诉任何人需要设置哪个环境变量(类似于“请不要手动运行”的标志)。 “为 cronjobs 设置单独的用户并只允许该用户访问和执行脚本”的答案解决了问题的根源(类似于只能由特定用户解锁的锁)。
    【解决方案3】:

    可能有很多方法可以做到这一点。在我的脑海中,我会说将它放在 root 拥有的目录中,并且只有 root 可以读取可能会接近实现您正在寻找的效果。

    您是否正在寻找专门限制它的任何进程?如果是这样,请使用权限,使其对任何这些进程都不可读。

    【讨论】:

      【解决方案4】:

      为 cron 作业创建一个用户,并设置脚本的权限,使其只能以该用户身份运行。当然,您需要将脚本放入该用户的crontab,您可以通过以该用户身份登录并运行crontab 来完成此操作。只是不要将该用户的密码提供给任何其他用户...

      起初我也在考虑设置一个环境变量来阻止从网络上运行这个脚本......但只是不把脚本放在网络服务器寻找网站页面的空间中,也会这样做。

      没有什么能阻止随机用户首先设置环境变量然后运行脚本。

      【讨论】:

        【解决方案5】:

        让您的 PHP 脚本检查 $_SERVER['REMOTE_ADDR'] 是否为空,如果不是,则让脚本退出而不做任何进一步的操作。

        【讨论】:

          猜你喜欢
          • 2011-05-10
          • 2018-06-11
          • 1970-01-01
          • 2020-02-28
          • 2018-07-30
          • 1970-01-01
          • 1970-01-01
          • 2012-11-01
          • 1970-01-01
          相关资源
          最近更新 更多