仅允许目录中特定文件的 POST 方法

仅允许目录中特定文件的 POST 方法

我有一个文件只能通过 POST 方法访问。

/var/www/folder/index.php

文档根目录位于文件夹内/var/www/,并index.php嵌套在文件夹内。

Apache 版本是:2.4.4。
我的配置如下:

<Directory "/var/www/folder">
    <Files "index.php">
        order deny,allow
        Allow from all
        <LimitExcept POST>
            Deny from all
        </LimitExcept>
    </Files>
</Directory>

我访问我的服务器,127.0.0.1/folder但我可以像平常一样获取和发布文件。

我也尝试过颠倒顺序,order allow,denyrequire、limitexcept 和 limit。

如何仅允许文件夹中的一个文件处理 POST 请求?

答案1

您可以使用Require指示:

<Directory "/var/www/folder">
    <Files "index.php">
        Require method POST
    </Files>
</Directory>

但是,由于这是授权部分的一部分,您可能想尝试一下:

<Directory "/var/www/folder">
    <Files "index.php">
        <LimitExcept POST>
            Order allow,deny
            Deny from all
        </LimitExcept>
    </Files>
</Directory>

答案2

如果您的 apache 配置技巧不起作用,您可以在 index.php 本身中执行此操作。在文件顶部添加类似以下内容:

<?php
if($_SERVER['REQUEST_METHOD'] != "POST") {
    header("HTTP/1.0 403 Forbidden");
    print("Forbidden");
    exit();
}

答案3

OrderAllow和系列Deny访问控制指令已被弃用,取而代之的是mod_authz_host

这实际上可能是您现有配置不起作用的原因,因为任何冲突的Require指令都将优先于您的配置(仍然通过修改 mod_access_compat,但这些指令将在未来的版本中被删除)。

由于您使用的是 2.4 系列,因此您还应该使用新样式指令。我在 2.4.4 上测试了以下配置,它按预期运行:

<Directory "/var/www/folder">
    Require all granted
    <Files "index.php">
        <LimitExcept POST>
            Require all denied
        </LimitExcept>
    </Files>
</Directory>

杰克 (Jack) 的观察认为您可以使用该Require method指令,这也是正确的,并且可以说是一种更像 2.4 的方法。

相关内容