【问题标题】:How to secure php file for cron tasks only?如何仅保护 cron 任务的 php 文件?
【发布时间】:2012-04-11 12:42:30
【问题描述】:

我知道那里有类似的帖子,但请放心,这不是重复帖子!

我在 Godaddy 服务器上有一个站点。我无权访问服务器根目录的外部(一切都是公开的)。

我有一个文件 delete.php 需要在 CRON 上运行,并且只能由 CRON 运行。任何人都不应出于任何原因手动执行该文件。

鉴于上述情况,我正在尝试尽可能地保护我的文件,所以让我们将此作为安全实验。

到目前为止,我的目标是使文件尽可能安全:

<?php
$isCLI = ( php_sapi_name() == 'cli' );

if (!$isCLI) {
    die("cannot run!");
} else {
    if(!isset($_SERVER['REQUEST_METHOD'])){
        // Do the task here
    }else{
        die("cannot run!");
    }
}
?>

那么,这在逻辑上是否安全?如何使它更加安全? godaddy 只能让我设置运行文件的日期/时间,仅此而已。

【问题讨论】:

  • 为什么你的 cron 脚本甚至在网络服务器的文档根目录中?
  • 把它放在网络根目录下。
  • 请大家阅读。我无权访问我的根目录的外部。我的整个目录都是公开的。同样,godaddy 不允许访问根目录之外的内容。

标签: php database automation cron


【解决方案1】:

检查cli SAPI 就足够了;通过 apache(无论是 mod_php 还是 fastcgi 或 cgi)执行它的用户永远不会导致 PHP 通过 CLI sapi 被调用。不过,您可以摆脱真实代码周围的丑陋else {};如果你 exit;then 块的末尾,则不需要 else 块。

但是,根本不将这种脚本放在文档根目录中会更干净。如果这不可能,也可以考虑使用.htaccess

Order deny,allow
Deny from all

如果文件位于不应完全锁定的文件夹中,请将这些行包含在&lt;Files whatever.php&gt;...&lt;/Files&gt;

【讨论】:

  • 我同意不将脚本放在 root 中更干净,但就像我说的那样,这对于 godaddy 来说是不可能的。
  • @Jonathan:这就是我去年从 GD 转移网站的原因 :(
【解决方案2】:

当然,将这些文件放在 webroot 之外是首选方法。 另一方面,您可以创建.htaccess,它为所有访问定义Deny all 规则。这样Deny all 可以防止直接访问服务器,但 PHP CLI 仍然可以访问它。

【讨论】:

  • 你能详细说明这样一行在我的 htaccess 文件中的样子吗?
  • 如果它们位于单独的文件夹中:Order deny,allowdeny from all。如果不是,请将这两行包裹在 &lt;Files cronwhatever.php&gt;...&lt;/Files&gt;
  • 将delete.php文件CHMOD修改为644有效吗?
  • 绝不是,但应该有“每行一个指令”。就我记得.php 文件正在被 Apache 读取 而不是执行而言,我认为 644 不会有任何好处。也许PHP CGI 的工作方式不同......
猜你喜欢
  • 2011-06-30
  • 2011-11-29
  • 2011-04-30
  • 2010-11-26
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多