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之外的所有文件夹.