我有一个PHP脚本,我不希望任何人能够通过他们的浏览器运行。
它发送电子邮件,由我的服务器的cron通过curl调用,但需要在公共www目录中。我需要什么权限或所有者才能将文件设置为仅允许我的服务器卷曲执行(或者我的意思是读取)文件?
我正在上世纪。
谢谢!
答案 0 :(得分:2)
如果可以,我建议采用不同的方式:通过CLI运行脚本(在cron作业中调用php -f
)并让PHP脚本检查它的运行方式。您可以查看是否使用php_sapi_name()从命令行界面调用脚本,并在从Web调用脚本时终止脚本。就我所见,这将是最安全的解决方案。
如果你真的需要通过curl
,请使用Josh的解决方案或定义一个需要作为get参数添加到脚本的密钥:
curl domain.com/script.php?password=123456
不是非常安全,因为密码将在crontab中可见,但应提供适当的保护以防止来自外部的访问,特别是如果您将其与检查$_SERVER["REMOTE_ADDR"]
结合并确保它是127.0.0.1
。
答案 1 :(得分:2)
您可以通过在目录中放置具有适当访问限制的.htaccess文件来限制对文件的访问,或者在php文件的开头执行基本密码检查,如下所示:
<?php
$password = $_GET['password'];
hash = '40bd001563085fc35165329ea1ff5c5ecbdbbeef'; //precalculated sha1 hash of your password
if (sha1($password) != $hash) {
die('Forget it!');
}
为了增加安全性,可以进一步完善,但你明白了......
答案 2 :(得分:0)
为什么不使用php-cli从命令行而不是通过curl运行它?
如果你真的必须托管它,你可以在你的.htaccess
中做这样的事情<Directory /your/path/>
Order allow,deny
Allow from 192.168.1.0/24
Allow from 127
</Directory>
答案 3 :(得分:0)
这是不可能的,正如所说的那样。据我所知,我认为您可以使用许多选项来解决您的问题:
您可以chown root或其他用户然后chmod 700,然后使用来自所有者的crontab文件的PHP命令行功能从cronjob调用脚本。
如果您需要通过curl访问该文件,那么您正在访问Web服务器,并且Web服务器需要能够执行/读取脚本,这将允许任何人执行该脚本。
另一种选择是使用基于规则的访问控制,如下所述:http://library.linode.com/web-servers/apache/access-control/rule-based-access以确保只有来自您服务器的连接才能访问相关文件,但这本身并不完全理想。
当然还有其他解决方案,但我希望这会有所帮助。