繁体   English   中英

设置php文件权限,以便仅我的服务器的curl可以运行

[英]Set php file permissions so only my server's curl can run

我有一个PHP脚本,我不希望任何人都能通过他们的浏览器运行。

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

我在centos上。

谢谢!

如果可以的话,我建议您以其他方式进行操作:通过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

您可以通过在目录中放置具有适当访问限制的.htaccess文件来限制对文件的访问,或者在php文件的开头实施基本的密码检查,如下所示:

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

为了增加安全性,可以对此进行进一步完善,但是您可以理解...

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

如果您确实需要托管它,则可以在.htaccess中执行类似的操作

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

正如所言,这是不可能的。 据我所知,我认为您可以使用许多选项来解决问题:

您可以先root或其他用户,然后再chmod 700,然后使用所有者的crontab文件中的PHP命令行功能从cronjob调用脚本。

如果您需要通过curl访问文件,那么您将要访问Web服务器,并且Web服务器需要能够执行/读取脚本,任何人都可以执行该脚本。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM