设置php文件权限,这样只有我的服务器的卷曲可以运行

问题描述:

我有一个PHP脚本,我不希望任何人都能够通过他们的浏览器运行。设置php文件权限,这样只有我的服务器的卷曲可以运行

它发送电子邮件,并通过我的服务器的cron卷曲调用,但需要在公共www目录。我需要什么权限或所有者才能将文件设置为仅允许我的服务器的curl执行(或者我的意思是读取)文件?

我在centos上。

谢谢!

你既可以限制访问的文件放置适当的访问限制.htaccess文件的目录或在你的PHP文件的开头是这样实现基本密码检查:

<?php 
$password = $_GET['password']; 
hash = '40bd001563085fc35165329ea1ff5c5ecbdbbeef'; //precalculated sha1 hash of your password 
if (sha1($password) != $hash) { 
    die('Forget it!'); 
} 

对于这可以进一步提高安全性,但你的想法...

+0

所有优秀的答案,但这一个提供了所需的安全性,同时仍然允许我从我的浏览器访问该文件进行测试。 谢谢! – robr 2010-04-17 18:09:44

+0

欢迎您。你帮我得到了1024个声望点:) Thx。 – selfawaresoup 2010-04-17 18:55:17

为什么不使用php-cli从命令行运行而不是通过curl运行?

如果你真的必须承载它,你可以做这样的事情在你的.htaccess

<Directory /your/path/> 
Order allow,deny 
Allow from 192.168.1.0/24 
Allow from 127 
</Directory> 

如果可以的话,我会建议做一个不同的方法:运行该脚本通过CLI(调用php -f在cron作业中)并让PHP脚本检查它是如何运行的。您可以使用php_sapi_name()找出命令行界面是否调用该脚本,并在从Web调用该脚本时终止该脚本。据我所知,这将是最安全的解决方案。

如果你真的需要通过curl得到它,使用Josh的解决方案或定义需要添加到脚本的GET参数密钥:

curl domain.com/script.php?password=123456 

并不十分安全,因为该密钥将是可见的在crontab中,但是应该提供适当的防范来自外部的访问,特别是如果你将它与检查$_SERVER["REMOTE_ADDR"]并确保它是127.0.0.1

这是不可能的,因为措辞。从我所知道的情况来看,我认为有很多选项可以用来解决您的问题:

您可以chown root或其他用户,然后chmod 700,然后使用PHP的命令从cronjob调用脚本来自所有者的crontab文件的在线功能。

如果您需要通过curl访问文件,那么您正在访问Web服务器,并且Web服务器需要能够执行/读取脚本,这将允许任何人执行脚本。

另一种选择是使用基于规则的访问控制,如下所述:http://library.linode.com/web-servers/apache/access-control/rule-based-access以确保只有源自服务器的连接能够访问相关文件,但这本身并不完全理想。

当然还有其他的解决方案,但我希望这是有帮助的。