允许服务器运行cron作业,但阻止使用.htaccess访问普通用户

时间:2014-08-05 18:25:54

标签: php .htaccess cron

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

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

我试过了:

order deny,allow
deny from all
allow from 127.0.0.1

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

感谢。

2 个答案:

答案 0 :(得分:3)

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

<强>的cronjob

新的crontab条目:

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

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

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

访问限制

通常,将cronjobs的脚本文件放在www路径之外是一种很好的做法。

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

.htaccess内的

/somewhere/www/

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

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

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

答案 1 :(得分:0)

您可以通过在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