使用.htaccess和将所有文件移到web根目录之外有什么安全区别吗



我正试图决定是否在每个子目录中使用.htaccess文件来拒绝对特定文件的所有请求(同时也拒绝目录索引(,或者是否更注重安全性,将除基本文件(index.php、.htacccess、robots.txt(之外的所有文件移到根目录之外,并从索引文件中调用它们。

这两种保护web应用程序中文件安全的方法在安全性方面有什么关键区别吗?

以下是.htaccess在根目录中的外观视图。

# pass the default character set
AddDefaultCharset utf-8
# disable the server signature
ServerSignature Off
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh|lock|DS_Store|json|)$">
order allow,deny
allow from all
</FilesMatch>
# disable directory browsing
Options All -Indexes
# prevent display of select file types
IndexIgnore *.wmv *.mp4 *.avi *.etc

但是,如果知道诸如https://www.example.com/security/please_dont_look.cfg

尽管该文件没有打印任何内容,但我不希望任何人知道它的存在,也不希望使用特定站点的解决方案,如使用modredirect将调用重定向到特定文件。

我可以在每个目录中使用.htaccess文件,例如:

order deny,allow
deny from all

从这个问题和回答(防止访问某个文件夹中的文件(

一种解决方案比另一种更防弹吗?

在如此复杂的系统中,这里的安全是指拥有多条防线,保持简单,并试图防止尽可能多的攻击向量。

理论上,这两种解决方案都应该为您提供完全相同的安全级别——在任何一种情况下都无法访问文件。

我建议将不应该直接访问的文件移到web根目录之外的目录中。很容易搞砸htaccess文件,当你把文件移到webroot之外时,这是不可能的。这也将防止对服务器目录结构的定时攻击:读取htaccess文件会带来时间损失,这可能是可以衡量的,尤其是当你的htaccess文件变得很大,并且每个子目录都有很多文件时。事实上,我建议完全跳过htaccess,只需在vhost配置中直接禁用索引,这样Apache就根本不必查找htaccess文件,从而加快您的网站速度。

此外,如果您通过fcgi运行php,您应该禁止apache在文件系统级别上访问文件,而只允许从php访问。有了这种设置,应该完全不可能通过攻击Web服务器(不包括php(来访问您的文件,除非您有一些权限提升漏洞(在这种情况下,您无论如何都会被搞砸(。

在这种设置中访问机密文件的唯一方法是说服PHP读取文件或破坏文件系统,即通过创建从web根到"web根之外的机密文件"目录的硬链接。防止这种情况的发生可以归结为确保您的PHP配置尽可能严格,不允许在webroot中创建文件,最重要的是,确保PHP应用程序本身不易受攻击。

最新更新