这就是我的应用程序文件系统的样子:
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
# 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服务器中都可以使用。
答案 0 :(得分:1)
这取决于“足够”对你来说是否足够好。在大多数情况下,deny from all
足够好了。
根据服务器设置或脚本,可能会利用其中一个可能导致htaccess文件被覆盖的内容。所以在apache中,您可以在server / vhost配置中设置规则而不是htaccess文件。
最好的方法可能仍然是将敏感文件移出文档根目录。