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

gus*_*gus 10 php apache security web

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

webroot位于:

/var/www/vhosts/my-domain-name/httpdocs
Run Code Online (Sandbox Code Playgroud)

还有一条路径叫做:

/var/www/vhosts/my-domain-name/private/
Run Code Online (Sandbox Code Playgroud)

但PHP脚本似乎无法读取那里的文件.

根据我的理解,任何放在webroot中的文件,如果通过其web-path/filename请求,都有可能被提供给公众.我隐约知道使用.htaccess文件告诉Apache不要提供某些文件/目录.

但是我可以(或应该)将我的敏感文件放在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
Run Code Online (Sandbox Code Playgroud)

更新:已解决

reddit/r/PHPHelp上的Picto给了我我需要的东西,它特定于Plesk系统.我不得不写一个名为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>
Run Code Online (Sandbox Code Playgroud)

所以我现在将我的敏感文件放在"myfolder"中,这是在webroot(httpdocs)之外.在此之后,要使这些设置生效,(重新启动Apache不起作用)有一些Plesk特定的命令,请参阅:http://www.gadberry.com/aaron/2006/02/09/plesk_vhost/

cor*_*tge 10

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

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

寻找php_value open_basedir

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

更多信息在open_basedir

注意:open_basedir存在一些安全问题,解释如下

http://www.hardened-php.net/advisory_012004.42.html

编辑:

我为每个域使用这个树结构:

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
Run Code Online (Sandbox Code Playgroud)

etc:用于应用程序配置文件.

log:用于Apache或nginx日志文件

phpCache:用于Zend_Cache文件

phpFiler:对于app的文件,如果用户具有权限,则PHP脚本为其提供服务.

phpInclude:php_value include_path

phpLogs:用于应用程序日志

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

phpTmp:用于临时文件,如上传.

phpTrash:phpFiler的垃圾.

私人:为我的私人妓女

www443:用于https文档根目录

www80:用于http文件根目录

在open_basedir clausule中,我放了除log和privat之外的所有文件夹.