Drupal + .htpasswd: как заблокировать сайт разработчика, но разрешить доступ к одному пути - PullRequest
0 голосов
/ 02 февраля 2011

Итак, у меня есть настройка сайта под управлением Drupal.Я заблокировал сайт с помощью базового HTTPAuth + htpasswd, чтобы не допустить появления злоумышленников.

Проблема в том, что на этом сайте разработчика должен быть доступен отдельный узел, веб-форма.

Мой вопрос: из-за запутанного процесса начальной загрузки в Drupal, как мне разрешить доступ только к * этому единственному файлу / URL?

Мой vhost config для htpasswd:

<Directory />
   AuthUserFile /var/www/.htpasswd
   AuthName "my radbad dev site"
   AuthType Basic
   Require valid-user
</Directory>

Я безуспешно пробовал что-то вроде следующего:

<Location "/node/1334">
   Allow from all
   Satisfy any
</Location>

Ответы [ 3 ]

3 голосов
/ 02 февраля 2011

Вы не можете сделать это так, потому что веб-форма не является файлом , она динамически генерируется из информации, которую вы дали Drupal (которую она поместила в БД). Все URI Drupal (кроме ваших загруженных файлов) являются index.php и отправляют вас в нужное место. Нет никакого способа сообщить httpauth, что иногда к index.php можно получить свободный доступ, а иногда требуется авторизация.

Есть несколько вариантов управления доступом через модуль Drupal, или (если ваш сайт работает на Drupal) вы можете просто присвоить ему ту же веб-форму, но никакие изменения в httpauth не решат вашу проблему.

0 голосов
/ 02 февраля 2011

Если вы хотите пойти по пути аутентификации HTTP, рассмотрите модуль безопасного сайта вместо редактирования .htaccess и создания файла .htpasswd.Это подверженный ошибкам процесс, в то время как Secure Site предоставляет вам форму, которую вы можете использовать для ввода пути, который вы хотите исключить из защиты.Более того, он использует систему аутентификации Drupal, поэтому вы можете запретить / разрешить пользователям доступ к сайту на основе ролей и разрешений Drupal.

0 голосов
/ 02 февраля 2011

<Location> - директивы применяются после обработки .htaccess. Это означает, что mod_rewrite уже сделал свое дело, а URL-адрес теперь /index.php?q=node/1334. Это плохо, потому что <Location> нельзя использовать для конфигураций, основанных на строке запроса. См. <Location> директиву и Как детали объединяются для получения подробной информации.

Вам придется придумать совершенно другое решение, например, сделать базу данных Drupal доступной по некоторому другому URL-адресу, который не доступен извне.

...