Apache-2.2

Apache:需要基本身份驗證,特定的 POST 請求除外

  • March 14, 2012

(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 中,基本身份驗證不會在最終生產中使用,因此我不想更改上傳程式碼本身。

嗯,好醜。。

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

因此,只允許忽略 auth 規則(假設主機被Allow/Deny規則允許),只針對POST/multiple. 那聲音怎麼樣?

引用自:https://serverfault.com/questions/369458