2017-05-17 30 views
0

我有一個使用LDAP授權的Apache 2.2,它的工作方式非常出色,並且使得我可以在本地訪問時繞過認證。Apache 2.2允許來自env = _variable_

Allow fromlocalIPhostnameAhostnameB等..

如果我curl從服務器,我沒有得到任何驗證必需。所以一切都很好,按預期工作。

我現在需要的是讓一個特定的URL也繞過授權。

我已經嘗試了所有使用SetEnvIf的常用解決方案;

SetEnvIf Request_URI "^/calendar/export" bypassauth=true` 
Allow from env=bypassauth IP_ADDRESS HOSTNAME_A HOSTNAME_B 

但這只是不工作!

  1. 本地接入仍然是不受限制的,但遠程它不是(有沒有變化)
  2. 如果我傾倒了我對URL的腳本服務器環境變量,我可以看到我的bypassauth變量被傳遞。

我只是不能爲我的生活弄清楚爲什麼Allow from env=bypassauth部分不工作,而它仍然服從其他指令參數。

我也嘗試另一個建議,使用位置指令;

<Location /calendar/export> 
    Satisfy Any 
    Allow from all 
    AuthType None 

    SetEnv WTF 123 
</Location> 

同樣,我可以看到我的新的環境變量(WTF)出現在該URL(當我甩在腳本中的服務器ENVS),所以我知道SetEnvSetEnvIf指令都在工作。

有什麼我失蹤(任何Apache2.2的怪癖?),因爲迄今爲止我見過的所有解決方案都不起作用。就好像我的Allow from更改在重新啓動Apache後沒有任何效果。我開始感覺到我的理智滑倒。

在編寫Satisfy Any,Order allow, denyAuth*指令的指令時是否還有特定的順序,這可能會影響到這一點?

回答

0

終於搞明白了! :)

看來我的網址已被mod_rewrite(我的環境變量被REWRITE_前綴應該敲響警鐘),它根據這個帖子https://stackoverflow.com/a/23094842/4800587,該mod_rewrite是我們SetEnvIfAllow指令後進行處理。

無論如何,長話短說;我使用了重寫/最終的URL和Location部分來繞過使用Allow any指令的身份驗證。所以我改變了...

<Location "/calendar/export"> 
    Allow from all 
</Location> 

to ..

<Location "/calendar/index.php/export"> 
    Allow from all 
</Location> 

這是最終的URL(重寫後),現在可以使用。

相關問題