apache - 使用 .htaccess 和将所有文件移出 Web 根目录之间是否存在安全差异?
问题描述
我正在尝试决定是否使用每个子目录中的 .htaccess 文件来拒绝对特定文件的所有请求(同时也拒绝目录索引),或者移动除基本文件之外的所有文件(index.php)是否更具安全意识, .htaccess, 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 访问。使用此设置,除非您有一些权限提升漏洞(在这种情况下您无论如何都被搞砸了),否则应该完全不可能通过攻击网络服务器(不包括 php)来访问您的文件。
在此设置中访问您的机密文件的唯一方法是说服 PHP 读取文件或弄乱文件系统,即通过创建从您的 Web 根目录到您的“Web 根目录外的机密文件”目录的硬链接。防止这种情况归结为确保您的 PHP 配置尽可能严格,不允许在 webroot 内创建文件,最重要的是,确保 PHP 应用程序本身不受攻击。
推荐阅读
- c# - 在 c# 中,当应用程序最小化时,ProcessCmdKey 有办法吗?
- postgresql - 找出postgresql查询进度
- postgresql - 使用 pgfutter 将 CSV 导入到 postgresql
- javascript - toString 方法应该返回正确的层次结构(嵌套回复)
- java - 如何在 javaFx 中连接按钮监听器
- c# - 将 Unicode 代理对转换为文字字符串
- elasticsearch - 策展人分配操作不会将 ES 索引 box_type 设置从“热”更改为“暖”
- python - 显示从 csv 到 pandas 的列
- php - 使用匿名帐户登录
- javascript - 使用动态键对数组中的对象进行排序