我目前的工作,其中包括使用cron作业新项目。
cron的脚本基本上运行的SQL查询,生成数据到一个文件,并通过FTP将该文件发送到另一台服务器。
该脚本是一个活的网站(www.website.com/sendOrders.php)
我没有看到任何安全问题或威胁,我认为这是极不可能的,任何人都可以找到服务器上的PHP脚本。 不过,我不希望脚本任何外人来执行。
有没有一种办法可以保护这个脚本?
感谢彼得
我目前的工作,其中包括使用cron作业新项目。
cron的脚本基本上运行的SQL查询,生成数据到一个文件,并通过FTP将该文件发送到另一台服务器。
该脚本是一个活的网站(www.website.com/sendOrders.php)
我没有看到任何安全问题或威胁,我认为这是极不可能的,任何人都可以找到服务器上的PHP脚本。 不过,我不希望脚本任何外人来执行。
有没有一种办法可以保护这个脚本?
感谢彼得
您可以将您的“秘密文件”到子文件夹,然后创建一个.htaccess文件在那里,阻止访问来自大家的是文件,除了正在运行的cronjob服务器。
例:
DENY FROM ALL
ALLOW FROM 123.123.123.123
如果你有shell访问也可能把脚本访问的文件夹外,并直接通过命令行或的cronjob这样运行了: php script.php
。
为什么不只是移动该脚本的服务器的Web根之外,从CLI执行呢? 这是没有执行它别人的机会。
如果你必须有它的根目录(和应该没有理由吧),只要确保为请求的客户端就是你正在运行它的服务器,它应该是绰绰有余。
这似乎是愚蠢的。 为什么有cron的machine A
通过HTTP上调用脚本machine B
,当你可以简单地B机的本地调度系统(在任何操作系统恰好是)就工作本身?
然后,你可以有局促的地方脚本,这不是通过HTTP访问,使您的安全问题completley没有实际意义。
如果文件是不应该被完全锁定的文件夹中,包裹在这些行<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>
这里是我的解决方案:
在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;
}
如何调用的cron的卷曲度:
curl --header "X-My-Cron-token: 321123321sd" https://example.com/cron.php
没有IP限制。 没有GET / POST。 如果开发人员模式,跳过限制。 无论你想你可以把脚本。