我要在共享主机上托管应用程序,在那里我无法创建虚拟主机或在apache上更改内容。
通常使用ZF的应用程序看起来像这样:
我的所有代码都在应用程序文件夹中。 但是也有一些带有敏感信息的.ini和.xml文件,例如登录名和密码等......
如果在deny from all
的应用程序文件夹中添加.htaccess,文件夹中的信息是否安全?
答案 0 :(得分:8)
我最近在http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/写了这篇文章。
基础知识是:
在根文件夹中创建index.php:
<?php
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';
在根文件夹中创建.htaccess文件:
SetEnv APPLICATION_ENV production
RewriteEngine On
RewriteRule .* index.php
也许在测试时将APPLICATION_ENV设置为开发:)
请注意,在引用静态文件时,baseUrl()视图助手现在指向根文件夹而不是公共/文件夹。
答案 1 :(得分:2)
您可以在共享主机上保留常用的目录结构。只需使用.htaccess更改文档根目录即可。我在处理共享主机时这样做:
RewriteEngine On
php_value upload_max_filesize 15M
php_value post_max_size 15M
php_value max_execution_time 200
php_value max_input_time 200
# Exclude some directories from URI rewriting
#RewriteRule ^(dir1|dir2|dir3) - [L]
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^public/.*$ /public/index.php [NC,L]
答案 2 :(得分:1)
如果我在应用程序文件夹中添加一个.htaccess,并且所有内容都是deny,那么该文件夹中的信息是否安全?
这不是一个理想的解决方案,因为如果提供商改变了.htaccess
文件的解析方式(他们在生产机器上永远不会这样做,那么如果发生这种情况就不会发生意外),但我想这是如果没有非公共目录,你可以得到最好的。
如果可以(我不知道ZF是否支持),请将xml
和ini
文件重命名为.php
。这样,即使删除了保护,它们也会被解析为PHP文件,而不是被提供给公众。这有点偏执,但如果它没有太多麻烦可行,不是一个坏主意。
答案 3 :(得分:0)
您是否只能访问虚拟主机上的公共目录?通常主机允许您访问至少一个上面的目录,在这种情况下,更好的解决方案是在其中放置应用程序的文件夹。然后,您可以将公共vhost目录符号链接到应用程序的公共目录中。如果不这样做,您至少可以将配置文件保存在vhost的公共目录之外,因为您可以轻松告诉ZF它们的位置。
如果你绝对不能做这些事情,那么你将不得不使用像你建议的那样的文件结构。假设敏感的ini / XML文件用于Zend_Config,该组件还支持PHP数组进行配置(参见http://framework.zend.com/manual/en/zend.config.introduction.html处的示例#1)。对于您来说,这将是一个稍微更安全的选项,因为您的htaccess文件无法正常工作,只要PHP文件仍被解析为PHP,您的敏感数据将无法查看。