Як обмежити доступ до сайту під час розробки?


17

Я створюю новий сайт на базі Drupal 7.

Розробка буде здійснюватися на загальнодоступному сервері. Я працюю в середовищі з декількома сайтами.

Я хотів би повністю заблокувати доступ до сайту будь-кому та нічого, крім авторизованих користувачів. Включаючи доступ до назви сайту, теми тощо ...

Раніше я використовував безпечний сайт для подібних завдань. Він здійснив аутентифікацію на рівні http і повернув 403, коли аутентифікація не вдалася. Він не має версії D7.

Який був би найпростіший спосіб зробити це?

Відповіді:


15

Створіть модуль і вставте наступний код у файл вашого модуля:

<?php

/**
 * Implementation of hook_boot().
 *
 * Ask for user credentials and try to authenticate.
 */
function foo_boot() {
  require_once DRUPAL_ROOT . '/includes/password.inc';

  if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    $query = "SELECT pass FROM {users} WHERE name = :name";
    $result = db_query($query, array(':name' => $_SERVER['PHP_AUTH_USER']));
    $account = new stdClass();
    foreach ($result as $row) {
      $account->pass = $row->pass;
    }
    if (isset($account->pass)) {
      if (user_check_password($_SERVER['PHP_AUTH_PW'], $account)) {
        return;
      }
    }
  }

  header('WWW-Authenticate: Basic realm="Development"');
  header('HTTP/1.0 401 Unauthorized');
  exit;
}

При цьому використовується автентифікація HTTP і перевіряється база даних Drupal на дійсне ім'я користувача та пароль.

Якщо у вас є проблеми з PHP CLI, Drush або cron, ви можете додати наступний код у гачку:

  // Allow cron through
  if (basename($_SERVER['PHP_SELF']) == 'cron.php') {
    return;
  }  

  // Allow PHP CLI/Drush through
  if (isset($_SERVER['argc'])) {
    if (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)) {
      return;
    }
  }

Повідомте розумним, це повністю викрутить ваше середовище Drush. Якщо ви створите обхід Drush, ви отримаєте додаткові кошти від мене.
— Лестер Пібоді

Виконано, додано більш широкий підхід, який включає PHP CLI та cron.php.
— Барт

1
Гарячий. Швидка відповідь теж. Я б знову проголосував, якби міг.
— Лестер Пібоді

це зовсім не працює з Drupal 8
— DrCord

Отже, чому це позначено як Drupal 7.
— Барт

4

Якщо ви використовуєте Drupal 7, для цієї мети доступний модуль Shield . Він автентифікує одного, спільного користувача та пароль.

Щит аутентифікації PHP Він створює простий щит для сайту з аутентифікацією Apache. Він приховує сайти, якщо користувач не знає просте ім’я користувача / пароль. Він поводиться з Друпалом як з «огородженим садом». Цей модуль допомагає захистити ваш (розроблений) сайт за допомогою аутентифікації HTTP.


+1 - Не винаходити колесо. Це вже зроблено, і рахунки для різних конфігурацій сервера та друку.
— Адам Бальзам

2

Додати mod_authв налаштування apache. Це залежить від вашого хоста (Linux, Windows). Це може включати завантаження модуля, це може включати просто коментування рядка у вашому httpd.conf

 LoadModule auth_basic_module modules/mod_auth_basic.so

Створіть .htpasswd файл, використовуючи htpasswdкоманду в папці бінарних файлів apache

 htpasswd -c user pass

Додайте наступний код до <DIRECTORY>заяви після того, як ваші чисті URL-адреси переписують правило:

AuthType Basic
AuthName "My Auth"
AuthUserFile \path\to\.htpasswd
Require valid-user

Перезапустіть апаш. Прибуток.


Спасибі. Я не можу перевірити це рішення, оскільки цей проект перебуває у спільному хостингу, і я не маю доступу до httpd.conf. Мені цікаво, однак, чи може це взагалі працювати в середовищі з декількома сайтами.
— дафшез

у вас є доступ до .htaccessфайлу в корінні файли drupal? Я не впевнений на 100%, але ви можете спробувати помістити його туди. Зауважте, рішення Барта здається набагато кращим :)
— Alex C

дивіться мою відповідь Дану. Я можу змінити .htaccess, але я не впевнений, як це допомагає мені в конфігурації багатьох сайтів.
— дафшез

Хоча це гарне рішення, але ви не можете перевірити функції соціального обміну за допомогою нього.
— Sukhjinder Singh


0

ОП прокоментувало, що це стосується спільного хостингу. Більшість спільних хостингів забезпечує cPanel або якусь іншу панель управління, яка дозволить зробити простий захищений паролем .htaccess для каталогів.

Я захистив каталог верхнього рівня веб-сайту, що розробляється, за допомогою цього методу. Якщо ви використовуєте cPanel для захисту каталогу, знайдіть пункт меню "Каталог захищених паролем".

Якщо ви захистите каталог верхнього рівня перед встановленням Drupal, cPanel створить файл .htaccess у цьому каталозі. Додайте або додайте вміст цього файлу за допомогою файлу .htaccess, який надає Drupal. Якщо ви захищаєте каталог після встановлення Drupal, я впевнений, що cPanel просто додасть потрібні рядки до наявного файлу Drupal .htaccess і не порушить решту файлів. Просто переконайтеся, що ви зберегли ці рядки, якщо під час оновлення Drupal заміните файл .htaccess.


Дякую, у мене теж є доступ до оболонки. Але чи можу я використовувати htaccess (або httpd.conf, з цього приводу), коли хочу захистити лише один сайт у конфігурації багатьох сайтів?
— daphshez

Вибачте, я пропустив коментар на багатьох сайтах в ОП. Я не використовую мультисайт, але я подивився, як це працює. Оскільки Drupal на багатьох сайтах використовує єдиний рейтинг найвищого рівня, з рішень тут, я думаю, що тільки Барт спрацював би. Можливо, ви також можете запустити сайт розробників у режимі обслуговування, щоб заблокувати всіх, крім адміністратора. Дивіться тут кілька підказок.
— Ден Халберт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.