我应该在哪里放置敏感文件,以便PHP脚本可以读取它们?

我应该在哪里放置敏感文件,以便PHP脚本可以读取它们?,php,apache,security,web,Php,Apache,Security,Web,我在Parallels/Plesk VPS主机上,这是一个非常新的问题 webroot位于: /var/www/vhosts/my-domain-name/httpdocs 还有一个路径称为: /var/www/vhosts/my-domain-name/private/ 但是PHP脚本似乎无法读取其中的文件 据我所知,任何放置在webroot中的文件,如果其web路径/文件名要求,都有可能被提供给公众。我隐约知道使用.htaccess文件告诉Apache不要提供某些文件/dir 但是我可以

我在Parallels/Plesk VPS主机上,这是一个非常新的问题

webroot位于:

/var/www/vhosts/my-domain-name/httpdocs
还有一个路径称为:

/var/www/vhosts/my-domain-name/private/
但是PHP脚本似乎无法读取其中的文件

据我所知,任何放置在webroot中的文件,如果其web路径/文件名要求,都有可能被提供给公众。我隐约知道使用.htaccess文件告诉Apache不要提供某些文件/dir

但是我可以(或者应该)将敏感文件放在webroot之外的某个地方,同时仍然允许PHP脚本读取它吗

谢谢大家!

以下是我在尝试读取上面“private”文件夹中的文件时出现的错误:

Warning: file() [function.file]: open_basedir restriction in effect. File(../../private/test.txt) is not within the allowed path(s): (/var/www/vhosts/blah.com/httpdocs:/tmp) in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8

Warning: file(../../private/test-dt.txt) [function.file]: failed to open stream: Operation not permitted in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8
更新:已解决

reddit/r/PHPHelp的Picto为我提供了我所需要的,它是普莱斯克系统特有的。 我必须编写一个名为vhost.conf的文件,放在conf文件夹中,该文件夹与httpdocs处于同一级别。在vhost.conf中,我使用了:

<Directory /var/www/vhosts/my-domain-name/httpdocs>
php_admin_value open_basedir /var/www/vhosts/my-domain-name/httpdocs:/tmp:/var/www/vhosts/my-domain-name/myfolder
</Directory>

php_admin_value open_basedir/var/www/vhosts/my domain name/httpdocs:/tmp:/var/www/vhosts/my domain name/myfolder
因此,我现在将敏感文件放在webroot(httpdocs)之外的“myfolder”中。
在此之后,要使这些设置生效,(重新启动Apache不起作用),需要给出一些特定于Plesk的命令,请参见:

将它们放在根文件夹上方。PHP脚本仍然可以访问它们,但是如果网站被破坏,那么根目录之上的目录应该保持安全


因此,将它们放在类似于
/var/www/vhosts/sensitive docs/
的地方,并设置目录上的权限,以便PHP可以读取文件。

将敏感数据存储在apache文档根目录之外是一个很好的做法

您需要允许PHP通过添加或修改虚拟主机配置来访问这些文件夹

寻找 php_值打开_basedir

并添加以冒号(:)分隔的文件夹

更多信息请访问

注意:open_basedir存在一些安全问题,如中所述

编辑:

我对每个域使用此树结构:

domain/            www-data permisions
├── etc            r-x
├── log            rwx
├── phpCache       rwx
├── phpFiler       rwx
├── phpInclude     r-x
├── phpLogs        rwx
├── phpSession     rwx
├── phpTmp         rwx
├── phpTrash       rwx
├── privat         --- 
├── www443         r-x
└── www80          r-x
etc:用于应用程序配置文件

日志:用于Apache或nginx日志文件

phpCache:用于Zend_缓存文件

phpFiler:对于应用程序的文件,如果用户有权限,PHP脚本将为其提供服务

phpInclude:php_值包含_路径

phpLogs:用于应用程序日志

phpSessions:用于存储此虚拟主机数据会话

phpTmp:用于临时文件,如上载的文件

phpTrash:phpFiler的垃圾

普里瓦特:为我的私人家禽

www443:用于https文档根目录

www80:用于http文档根目录


在open_basedir条款中,我放置了除log和privat之外的所有文件夹。

这意味着所谓的文件夹有效,不允许在给定目录(例如,您的特定webroot)之外打开任何文件和目录。这在共享主机上非常常见,如果您没有访问php.ini的权限,那么您就运气不佳,无法访问../private中的文件

要访问受保护的文件,请在通常的
httpdocs
-目录下添加一个目录(例如private),并在目录中添加一个
.htaccess
-文件

order allow
deny deny from all
这将阻止任何人在不通过php脚本的情况下访问这些文件


最后一点注意:如果您的php文件位于
httpdocs
-目录下,那么您的脚本需要指向
./private/test dt.txt
,而不是
。/../private/test dt.txt

使类似RedHat的系统上的apache组可读。如果您正在处理ubuntu,请为组设置读取权限:www dataNo。打开\u basedir设置不受安全\u模式的影响。Safe可以关闭(事实上这更好)open_basedir限制仍将适用。关于您的最后一个注意事项,是的,我知道,我的脚本位于webroot的子文件夹中,因此两次“向上”。但是谢谢你。嗨,科雷奇,谢谢你,但是我不太明白上面的哪个文件夹会建议放置我的敏感文件,这些文件需要我的PHP脚本读取。我的问题必须用普莱斯克特定的信息来解决。我在Reddit得到了帮助,还找到了这个页面:Ops@gus对不起!应用程序文件的最佳位置是phpFiler。