【问题标题】:Allow server to run cron jobs but block access to normal user with .htacess允许服务器运行 cron 作业,但使用 .htaccess 阻止对普通用户的访问
【发布时间】:2014-08-05 18:25:54
【问题描述】:

有一个 cron 作业位于普通目录的文件夹中。

我试图不允许任何其他人访问此文件,除了我的服务器运行 cron 作业。

我试过了:

order deny,allow
deny from all
allow from 127.0.0.1

但没有运气。我已经将 cron 作业放在 Web 根目录之外,但无论我和我的主机尝试什么,我都无法让它运行。

谢谢。

【问题讨论】:

    标签: php .htaccess cron


    【解决方案1】:

    这里有两件事:(a) 让 cronjob 运行,(b) 访问限制。

    Cronjob

    新的 crontab 条目:

    */10 * * * * /usr/bin/php /somewhere/www/cronjob.php
    

    在 cronjob.php 上设置正确的权限:

    • 执行标志:chmod +x /somewhere/www/cronjob.php

    访问限制

    一般来说,将 cronjobs 的脚本文件放置在 www 路径之外是一种很好的做法。

    如果您确实需要将它们放在www 中,那么您可以通过访问限制来保护它们。对于网络服务器 Apache,这将通过 .htaccess 工作,如下所示:

    .htaccess/somewhere/www/:

    <Files "cronjob.php">
    Order Allow,Deny
    Deny from all
    </Files>
    

    这可以保护文件 cronjob.php 免受外部访问,但允许 cron 执行该文件。

    如果没有任何效果,请按照我的分步指南进行操作:https://stackoverflow.com/a/22744360/1163786

    【讨论】:

    • 测试了,但它没有运行。 cronjob 工作正常,没有任何 htaccess 限制。第一部分是什么意思,如何设置 cronjob 的权限?
    • chmod +x /somewhere/www/cronjob.php。请记住,这里涉及不同的用户。请使用chownchgrp 检查用户相关权限。网络用户通常是“www-data”——这不是“cron”执行用户,对……
    【解决方案2】:

    您可以通过在 crontab 文件中设置环境来限制访问

    SCRIPT_RUN_ENV=mycronenv

    并验证函数内的环境字符串:

    if (get_env('SCRIPT_RUN_ENV') != 'mycronenv') {
        die('Access denied');
    }
    

    或者你可以通过IP限制访问

    if( $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR'] || $_SERVER['REMOTE_ADDR'] != "127.0.0.1" ){
        die('Access denied!');
    }
    

    您可以通过 .htaccess 设置脚本文件的权限,例如:

    Order deny,allow
    Allow from THIS_SERVER_IP
    Allow from 127.0.0.1
    Deny from all
    

    【讨论】:

    • 我想到了第二种解决方案,来到这里是为了更好的解决方案,仍然会使用那个,它是最简单的。
    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2021-06-17
    • 2014-12-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多