2016-02-25 110 views
1

我有一个脚本,通过CRON任务中的CURL请求每天调用一次。我希望通过直接浏览器获取请求来保护它免于在我的实时域中执行。阻止CURL(通过CRON)请求的脚本在浏览器中运行

此时我无法将CRON移动到Web根目录之上。我现在定期任务是这样的:

curl -q https://example.com/cron/daily/ > /dev/null 

然后在我的CRON控制器的头我会使用这样的:

if ((in_array($_SERVER["HTTP_HOST"], $this->config->item('live_domains'))) AND (IS_CURL)) { 
    show_error("Daily CRON tasks can only be run from the command line on the live server."); 
} 
+0

使用秘密令牌作为参数,或通过htaccess以某种方式(不是100%有效,但多层应该帮助)锁定它。更好的办法是,将其移出网站并从CLI运行它 – CollinD

+0

谢谢,我已经为应用配置添加了令牌/密钥,并且现在我正在CRON任务执行之前在实时服务器上检查它。 :) –

回答

1

如果cron的脚本来自同一服务器的东西运行托管您应该可以添加:

if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1') { 
    show_error("Daily CRON tasks can only be run from the command line on the live server."); 
} 

或使用允许的IP地址交换127.0.0.1,它可以从中运行。

除此之外,没有防弹的方法可以区分正在从cURL运行的作业,并且不会被欺骗。

或者如CollinD建议的那样,使用秘密标记作为参数并检查它。

一个更好的选择可能是使用的.htaccess:

<Location /cron> 
    Order Deny,Allow 
    Deny from all 
    Allow from 127.0.0.1 
</Location> 

使用这种方法,你不需要修改PHP代码,只需使用Apache,以允许/拒绝访问基于cron的脚本IP。

+0

谢谢 - 非常有帮助的建议。 :) –