我目前正在开展一个涉及使用CRON工作的新项目。
CRON脚本基本上运行SQL查询,将数据生成到文件中,然后通过FTP将该文件发送到另一台服务器。
该剧本位于实时网站(www.website.com/sendOrders.php)
我没有看到任何安全问题或威胁,我认为任何人都不太可能在服务器上找到PHP脚本。但是我不希望脚本被任何外人执行。
有没有办法可以保护这个脚本?
由于 彼得
答案 0 :(得分:7)
您可以将“秘密文件”移动到子文件夹中,然后在其中创建一个.htaccess file,阻止所有人访问该文件,但运行Cronjob的服务器除外。
示例:
DENY FROM ALL
ALLOW FROM 123.123.123.123
如果您有shell访问权限,您可能还会将脚本放在可访问文件夹之外,并通过命令行或cronjob直接运行,如下所示:php script.php
。
答案 1 :(得分:3)
为什么不将脚本移到服务器的Web根目录之外并从CLI执行呢?这是没有其他人执行它的机会。
如果你必须在webroot中拥有它(并且没有理由),只需确保请求的客户端是你正在运行它的服务器,它应该绰绰有余。
答案 2 :(得分:2)
这看起来很傻。为什么cron machine A
在machine B
上通过HTTP调用脚本,当你可以简单地让机器B的本机调度系统(无论它碰巧是什么操作系统)自己完成工作?
然后,您可以将脚本隐藏在某些无法通过HTTP访问的地方,并使您的安全问题无法解决。
答案 3 :(得分:0)
如果文件位于不应完全锁定的文件夹中,请将这些行包装在<Files whatever.php>...</Files>
<Files "cron.php">
Order deny,allow
Allow from name.of.this.machine
Allow from another.authorized.name.net
Allow from 127.0.0.1
Deny from all
</Files>
答案 4 :(得分:0)
这是我的解决方法:
在cron.php
中检查是否发送了某些特定的标头
cron.php
if (secure_cron_script() === false) {
echo 'Unauthorized';
return;
}
echo 'OK';
functions.php
function secure_cron_script () {
if (DEBUG)
return true;
$http_headers = getallheaders();
if (empty($http_headers['X-My-Cron-token'])
|| $http_headers['X-My-Cron-token'] !== SECURE_CRON_TOKEN) {
return false;
}
return true;
}
如何使用curl调用cron:
curl --header "X-My-Cron-token: 321123321sd" https://example.com/cron.php
无IP限制。没有GET / POST。如果为开发人员模式,则跳过限制。您可以将脚本放置在任意位置。