Apache:需要基本身份验证,特定 POST 请求除外

Apache:需要基本身份验证,特定 POST 请求除外

(RHEL 6.2,Apache 2.2.1)

我正在尝试让一个 LAMP 站点在基本身份验证之后运行,以防止一般访问(这是一个仍在生产中的站点的测试环境),并且我遇到了一个问题,即多文件上传功能失败,因为它没有正确处理身份验证;我可以在 Apache 日志中看到,POST 的身份验证已被删除

10.77.34.123 - testuser [14/Mar/2012:14:10:13 +1100] "GET /index.php/tools/required/files/import?ocID=&searchInstance=file1331694544 HTTP/1.1" 200 8558
10.77.34.123 - testuser [14/Mar/2012:14:10:13 +1100] "GET /concrete/js/swfupload/swfupload.js?_=1331694608575 HTTP/1.1" 200 36807
10.77.34.123 - testuser [14/Mar/2012:14:10:13 +1100] "GET /concrete/js/swfupload/swfupload.handlers.js?_=1331694608601 HTTP/1.1" 200 6443
10.77.34.123 - testuser [14/Mar/2012:14:10:13 +1100] "GET /concrete/js/swfupload/swfupload.fileprogress.js?_=1331694608621 HTTP/1.1" 200 7529
10.77.34.123 - testuser [14/Mar/2012:14:10:13 +1100] "GET /concrete/js/swfupload/swfupload.queue.js?_=1331694608636 HTTP/1.1" 200 3479
10.77.34.123 - testuser [14/Mar/2012:14:10:14 +1100] "GET /concrete/flash/swfupload/swfupload.swf?preventswfcaching=1331694608650 HTTP/1.1" 200 12419
10.77.34.123 - - [14/Mar/2012:14:10:20 +1100] "POST /index.php/tools/required/files/importers/multiple HTTP/1.1" 401 488

作为一个快速修复,我更改了 Apache 配置,使其仅要求对 GET 请求进行身份验证,而不是 POST,但从安全角度来看,这并不可取。当前的 Apache 指令是:

<Directory />
  AuthName "Priceline Portal Dev"
  AuthUserFile /home/dev_priceline/passwords
  <Limit GET>
    AuthType Basic
    Require valid-user
  </Limit>
</Directory>

它需要基本身份验证才能访问网站(通过 GET),但允许 POST 通过。

我想要做的是将其更改为: URL 中包含“多个”的 POST 请求不需要身份验证,所有其他请求都需要基本身份验证。

有没有办法使用 Apache 指令来实现这一点?多重上传功能内置于所使用的 CMS 中,并且基本身份验证不会在最终生产中使用,因此我不想更改上传代码本身。

答案1

嗯,相当丑陋......

<Directory />
    AuthName "Priceline Portal Dev"
    AuthUserFile /home/dev_priceline/passwords
    AuthType Basic
    Require valid-user
</Directory>
<LocationMatch .*/multiple$>
    <Limit POST>
        Satisfy Any
    </Limit>
</LocationMatch>

因此,只需允许忽略身份验证规则(假设主机被Allow/Deny规则允许),仅针对POST以 结尾的请求/multiple,就像您的日志中那样。听起来怎么样?

相关内容