Dot-Htaccess

要求全部拒絕沒有效果。要求所有允許,工作

  • March 4, 2020

我有一個如下的網站結構設置,我試圖為每個組織組織訪問級別,但沒有指定<Directory>需要修復結構(也就是,如果我將其複製到不同的站點,複製到子文件夾中,則需要編輯所有 .htaccess 到新位置)。

  • /app/ - 允許所有,拒絕配置/等
  • /app/templates/ - 全部拒絕
  • /app/templates/mytheme/ - 只允許圖像、javascript、css、字型
  • /app/lib/ - 全部拒絕

我已經嘗試實現 Apache2.4 的新(ish)指令方案:

/etc/apache2/conf-enabled/security.conf

... more stuff above ...

<Directory />
  AllowOverride All
  Require all denied
</Directory>

... more stuff below ...

並添加Require all allowed.htaccess應用程序的根目錄中,同時添加Require all denied.htaccess我希望拒絕訪問的文件夾中。

問題是Require all denied似乎什麼都不做。我已經看到使用該mod_auth_compat庫或任何庫的參考,但似乎只有舊版本的 apache (v2.3) 才需要它。

我在 Debian 8 上使用 Apache 2.4。

以前,我會提供:

Order Allow, Deny
Deny from all

然後將以下內容放入需要訪問的文件夾中:

Allow from all

.. 並且我只需要允許特定的文件類型訪問,

<FilesMatch "\.(jpg|jpeg|gif|png|bmp|svg|css|less|sass|scss|js|ttf|woff|woff2|eot)$">
   Allow from all
</FilesMatch>

根據apache的文件,混合新舊聲明可能會產生意想不到的結果,因此,我只使用新聲明。沒有使用舊的權限聲明格式載入的雜散.htaccess文件或文件 - 所以這應該有效嗎?*.conf

鑑於我佈置的文件夾結構,以及在“/etc/apache2/conf-enabled/security.conf”中載入的內容(因為這是 AllowOverride 的“根”聲明的位置[指定時它似乎不起作用AllowOverride All在網站 conf ( 000-default.conf )] 中相同格式的聲明中,有人可以提供一些指導,或者最好是解決這個問題的方法。

Require請參閱帶有指令範例的升級指南: https ://httpd.apache.org/docs/trunk/en/upgrading.html

  • Deny from all就是現在Require all denied
  • Allow from all就是現在Require all granted

情節扭曲:預設情況下,Apache 2.4 不授予對任何目錄的訪問權限,並且評估順序已更改。

在 apache 2.2 中阻止對文件系統的訪問是司空見慣的,正如您所寫的那樣,使用Directory /+ 。Require all denied現在應該刪除它。如果它取代了子目錄中的權限,它將適得其反。

請參閱有關合併身份驗證限制的文件。在實踐中它變得異常複雜。https://httpd.apache.org/docs/trunk/en/mod/mod_authz_core.html#authmerging

Require all grantedin在子目錄中的the/app之前被評估。看起來 apache 在滿足第一個允許規則時授予訪問權限,因此它是允許的。整個樹都被父級的指令打開了,你對此無能為力。Require all denied``/app/lib

我的建議是不要混合公共和私人內容。在實踐中是完全無法管理的。如果它被送達,它意味著被送達。

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