【问题标题】:MAMP .htaccess LimitExcept doesn't block GET requestMAMP .htaccess LimitExcept 不会阻止 GET 请求
【发布时间】:2020-08-05 09:57:34
【问题描述】:

我正在学习 .htaccess 中的 Apache 指令并测试安全设置。我发现了 LimitExcept 指令。

我在 localhost 中有一个 wordpress 目录,里面有一个 .htaccess,所以这些指令会影响所有子目录,比如我的项目文件。

这是我在 .htaccess 中的代码:

Options All -Indexes
FileEtag None

<files wp-config.php>
order allow,deny
deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
</IfModule>

<LimitExcept POST HEAD>
Order Deny,Allow
Deny from all
</LimitExcept>

#<IfModule mod_rewrite.c>
#RewriteEngine on
#RewriteCond %{REQUEST_METHOD} ^GET
#RewriteRule .* - [R=400]
#</IfModule>

让我烦恼的是,我使用的 LimitExcept 指令并没有阻止我访问我的主页。就像允许 GET 请求一样。

我必须添加或使用重写指令来阻止我的 GET 请求。

我还发现,如果我将 HEAD 方法从当前的 LimitExcept 指令中排除,那么请求我的主页将正确返回一个 Forbidden 请求响应。

我了解可以在服务器配置中应用其他设置,但我不想在该级别进行更改,因为我可能无法从我的共享托管服务服务器访问此配置。

那么我是否遗漏了什么或者 LimitExcept 指令有问题?

【问题讨论】:

    标签: php wordpress apache .htaccess mamp


    【解决方案1】:
    <LimitExcept POST HEAD>
    Order Deny,Allow
    Deny from all
    </LimitExcept>
    

    似乎 HEAD 和 GET 具有内在联系。阻止一个,你阻止另一个。来自the docs for &lt;limit&gt;(也包括&lt;LimitExcept&gt;):

    如果使用 GET,它也会限制 HEAD 请求。

    在我的测试中,反之亦然……如果你限制 HEAD,那么 GET 也会受到限制。

    所以,回到您的&lt;LimitExcept POST HEAD&gt; 指令...通过为 HEAD 创建一个异常,您似乎也在为 GET 创建一个异常。您需要从指令中删除 HEAD。 (假设您使用的是 Apache 2.4,您还应该使用 Require 指令,而不是旧的 Order / Deny 指令。)例如:

    <LimitExcept POST>
    Require all denied
    </LimitExcept>
    

    【讨论】:

    • 感谢@MrWhite 的确认。 MAMP 安装了 Apache 2.2,是的,我试过只使用 POST,但我发现 GET 请求被拒绝。即使 HEAD 只检索 GET 请求的响应头,它们仍然是不同类型的请求!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多