Назад | Перейти на главную страницу

Требовать все отклонено не имеет никакого эффекта. Требовать все разрешено, работает

У меня настроена структура веб-сайта следующим образом, и я пытаюсь организовать уровни доступа для каждого, но без указания <Directory> так как это требует, чтобы структура была исправлена ​​(иначе говоря, если я скопирую это на другой сайт, во вложенную папку, потребуется отредактировать весь .htaccess в новое место).

Я пробовал реализовать новую схему директив 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).

Я использую Apache 2.4 в Debian 8.

Раньше я поставлял:

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 granted в /app оценивается до Require all denied в /app/lib подкаталог. Похоже, что apache предоставляет доступ после выполнения первого разрешающего правила, поэтому он разрешен. Все дерево было открыто директивой для родителя, и вы ничего не можете с этим поделать.

Я советую не смешивать публичный и частный контент. На практике это совершенно неосуществимо. Если он подан, значит, его нужно подавать.