(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
,就像您的日志中那样。听起来怎么样?