Bagaimana cara membatasi akses ke situs selama pengembangan?


17

Saya membuat situs berbasis Drupal 7 baru.

Pengembangan akan berada di server yang dapat diakses publik. Saya bekerja di lingkungan multi-situs.

Saya ingin benar-benar memblokir akses ke situs ini kepada siapa saja & apa pun selain pengguna resmi. Termasuk akses ke nama situs, tema, dll ...

Saya menggunakan Situs Aman untuk tugas serupa sebelumnya. Itu otentikasi http-level dan kembali 403 ketika otentikasi gagal. Itu tidak memiliki versi D7.

Apa cara termudah untuk melakukan ini?

Jawaban:


15

Buat modul dan rekatkan kode berikut dalam file modul Anda:

<?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;
}

Ini menggunakan Otentikasi HTTP dan memeriksa Database Drupal untuk nama pengguna dan kata sandi yang valid.

Jika Anda memiliki masalah dengan PHP CLI, Drush atau cron, Anda dapat menambahkan kode berikut di hook:

  // 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;
    }
  }

Kata bijak, ini benar-benar akan merusak lingkungan Drush Anda. Suara positif tambahan dari saya jika Anda membuat solusi Drush.
Lester Peabody

Selesai, menambahkan pendekatan yang lebih luas yang mencakup PHP CLI dan cron.php.
Bart

1
Panas. Jawaban cepat juga. Saya akan memilih lagi jika saya bisa.
Lester Peabody

ini tidak berfungsi sama sekali dengan Drupal 8
DrCord

Karenanya mengapa ini ditandai sebagai Drupal 7.
Bart

4

Jika Anda menggunakan Drupal 7, modul Shield tersedia untuk tujuan ini. Ini mengotentikasi satu pengguna, kata sandi dan bersama.

Perisai Otentikasi PHP. Itu menciptakan perisai sederhana untuk situs dengan otentikasi Apache. Itu menyembunyikan situs, jika pengguna tidak tahu nama pengguna / kata sandi sederhana. Ini menangani Drupal sebagai "taman bertembok". Modul ini membantu Anda melindungi situs (dev) Anda dengan otentikasi HTTP.


+1 - Jangan menemukan kembali kemudi. Ini sudah dilakukan dan akun untuk konfigurasi server yang berbeda dan drush.
Adam Balsam

2

Tambahkan mod_authke pengaturan apache. Ini bervariasi tergantung pada host Anda (linux, windows). Ini mungkin melibatkan pengunduhan modul, mungkin hanya melibatkan penghapusan komentar pada baris di httpd.conf Anda

 LoadModule auth_basic_module modules/mod_auth_basic.so

Buat file .htpasswd, menggunakan htpasswdperintah di folder apache binaries

 htpasswd -c user pass

Tambahkan kode berikut ke <DIRECTORY>pernyataan Anda tepat setelah aturan penulisan ulang URL bersih Anda:

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

Mulai ulang apache. Keuntungan.


Terima kasih. Saya tidak dapat menguji solusi ini karena saya proyek ini dalam shared hosting dan saya tidak memiliki akses ke httpd.conf. Namun saya bertanya-tanya apakah ini dapat bekerja sama sekali dalam lingkungan multi-situs.
daphshez

apakah Anda memiliki akses ke .htaccessfile di root drupal? Saya tidak 100% yakin, tetapi Anda dapat mencoba meletakkannya di sana. Pikiran Anda, solusi Bart tampaknya jauh lebih baik :)
Alex C

lihat balasan saya untuk Dan. Saya dapat mengubah .htaccess, tetapi saya tidak yakin bagaimana ini membantu saya dalam konfigurasi multi-situs.
daphshez

Meskipun ini solusi yang baik tetapi Anda tidak dapat menguji fitur berbagi sosial dengannya.
Sukhjinder Singh


0

OP telah berkomentar bahwa ini adalah shared hosting. Sebagian besar hosting bersama menyediakan cPanel atau panel kontrol lain, yang akan melakukan perlindungan kata sandi .htaccess sederhana untuk direktori.

Saya telah melindungi direktori tingkat atas dari situs yang sedang dikembangkan menggunakan metode ini. Jika Anda menggunakan cPanel untuk melindungi direktori, cari item menu "Password Protect Directories".

Jika Anda melindungi direktori tingkat atas sebelum Anda menginstal Drupal, cPanel akan membuat file .htaccess di direktori itu. Tambahkan atau tambahkan konten dari file itu dengan file .htaccess yang disediakan Drupal. Jika Anda melindungi direktori setelah menginstal Drupal, saya cukup yakin cPanel hanya akan menambahkan baris yang diperlukan ke file .htaccess Drupal yang ada dan tidak mengganggu sisa file. Pastikan Anda mempertahankan baris tersebut jika Anda mengganti file .htaccess selama pemutakhiran Drupal.


Terima kasih, saya sebenarnya punya akses shell juga. Tetapi bisakah saya menggunakan htaccess (atau httpd.conf, dalam hal ini) ketika saya ingin melindungi hanya satu situs dalam konfigurasi multi-situs?
daphshez

Maaf, saya ketinggalan komentar multi-situs di OP. Saya tidak menggunakan multi-situs, tetapi saya mencari cara kerjanya. Karena Drupal multi-situs menggunakan dir tingkat atas tunggal, dari solusi di sini, saya pikir hanya Bart yang akan bekerja. Mungkin Anda juga bisa menjalankan situs dev dalam mode pemeliharaan, untuk mengunci semua orang kecuali admin. Lihat di sini untuk beberapa petunjuk.
Dan Halbert
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.