.htaccess和web.config目录访问阻塞可靠吗?

时间:2014-01-23 06:42:56

标签: php apache .htaccess iis web-config

我需要完全阻止访问PHP应用程序的某些目录。

这就是我的应用程序文件系统的样子:

www
├── core
│   ├── .htaccess
│   └── many .php files
│
├── logs
│   ├── .htaccess
│   └── many .log files
│
├── .htaccess
├── index.php
└── web.config

www / core / .htaccess和www / logs / .htaccess看起来完全一样:

deny from all

www / .htaccess如下所述:

#   Friendly-url definitions
RewriteEngine On
RewriteCond %{REQUEST_URI} /+[^\.]+$ 
RewriteRule ^(.*[^/])$ %{REQUEST_URI}/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L]

另外,我的IIS服务器的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <hiddenSegments>
                    <add segment="core"/>
                    <add segment="settings"/>
                    <add segment="logs"/>
                </hiddenSegments>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

这够了吗?

我曾经在我的所有PHP包含文件中放入“index.php存在”验证之前的任何其他代码,以确保它不会被直接访问。如果直接访问该文件,它将返回404.但我想摆脱那些烦人的验证行。

现在,对于所有这些.htaccess文件,当我尝试直接访问其中一个文件夹中的文件时,我的请求被完全“忽略”并执行www/index.php - 比404错误要好得多。< / p>

但是,这够了吗?我可以无所畏惧地依赖.htaccess并删除所有那些索引验证重复性吗? IIS的web.config怎么样?

PS:由于应用程序可以在所有服务器配置中运行,我无法保证将这些目录放在www之外的可能性。此外,必需在Apache和IIS服务器中都可以使用。

1 个答案:

答案 0 :(得分:1)

这取决于“足够”对你来说是否足够好。在大多数情况下,deny from all足够好了。

根据服务器设置或脚本,可能会利用其中一个可能导致htaccess文件被覆盖的内容。所以在apache中,您可以在server / vhost配置中设置规则而不是htaccess文件。

最好的方法可能仍然是将敏感文件移出文档根目录。