.htaccess,命令允许、拒绝、拒绝所有:困惑?
Posted
技术标签:
【中文标题】.htaccess,命令允许、拒绝、拒绝所有:困惑?【英文标题】:.htaccess, order allow, deny, deny from all: confusion 【发布时间】:2011-07-02 04:35:18 【问题描述】:在我的 .htaccess 中,我有以下内容:
<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
<Files .htaccess>
order allow,deny
deny from all
</Files>
现在,我只是愚蠢还是有什么问题?我在网上和 Apache 文档中查看并且不理解 limit get post put delete
等,但我认为无论它在做什么,它都在说允许,然后在允许之后再次拒绝?这对我来说没有意义,我不确定是否应该将其从 .htaccess 中删除,或者如果错误则更正它?我猜第三个意思是拒绝访问 .htaccess 文件,但是这个命令允许然后拒绝似乎首先允许然后立即拒绝。
【问题讨论】:
htpasswdgenerator.com/apache/htaccess.html 【参考方案1】:这是使用 Apache 配置指令的一种相当混乱的方式。
从技术上讲,第一位等价于
Allow From All
这是因为Order Deny,Allow
在允许指令之前评估拒绝指令。
在这种情况下,Deny 和 Allow 相互冲突,但作为最后评估的 Allow 将匹配任何用户,并授予访问权限。
现在,为了清楚起见,这种配置是不好的,应该不惜一切代价避免,因为它与未定义的行为接壤。
限制部分定义了哪些 HTTP 方法可以访问包含 .htaccess 文件的目录。
这里,GET 和 POST 方法被允许访问,而 PUT 和 DELETE 方法被拒绝访问。这是一个解释各种 HTTP 方法的链接:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
但是,只要您没有直接处理非标准方法(PUT 和 DELETE)的自定义 CGI 脚本或 Apache 模块,使用这些限制通常是无用的,因为默认情况下,Apache 不处理完全没有。
还必须注意,还有一些其他方法也可以由 Limit 处理,即 CONNECT、OPTIONS、PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK 和 UNLOCK。
最后一点肯定也没什么用,因为任何正确配置的 Apache 安装都包含以下配置(对于 Apache 2.2 和更早版本):
#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>
禁止访问以“.ht”开头的任何文件。
等效的 Apache 2.4 配置应如下所示:
<Files ~ "^\.ht">
Require all denied
</Files>
【讨论】:
感谢回复;那么我应该删除 和 吗?我还改用你的更改了我的 .htaccess 阻止方法。 您基本上可以删除整个文件,只要您确保网站不会以不安全的方式使用 PUT 和 DELETE 方法。 它不适用于 apache v2.4 。我收到此错误“无效命令 'Order',可能拼写错误或由未包含在服务器配置中的模块定义” 我的回复是v2.2安装配置文件的摘录。使用新的配置说明进行更新。请注意,正如我在回答中所说,这部分配置很可能已经存在于配置文件中。 哪种方式更安全?使用“”是否安全,直接添加“全部拒绝”更安全? (例如,如果我们想从 GET、POST 等所有方法中拒绝?以上是关于.htaccess,命令允许、拒绝、拒绝所有:困惑?的主要内容,如果未能解决你的问题,请参考以下文章