it-swarm-id.com

Bagaimana cara membatasi akses ke situs selama pengembangan?

Saya membuat situs baru Drupal 7).

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 yang berwenang. 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?

16
daphshez

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;
    }
  }
15
Bart

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 untuk melindungi situs (dev) Anda dengan otentikasi HTTP.

4
Johnathan Elmore

Tambahkan mod_auth Ke 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 perintah htpasswd di folder binari Apache

 htpasswd -c user pass

Tambahkan kode berikut ke pernyataan <DIRECTORY> 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.

2
Alex C

OP berkomentar bahwa ini adalah shared hosting. Kebanyakan 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 isi file itu dengan file .htaccess yang Drupal menyediakan. Jika Anda melindungi direktori setelah menginstal Drupal, saya cukup yakin cPanel hanya akan menambahkan baris yang diperlukan untuk yang sudah ada Drupal .htaccess file dan tidak mengganggu sisa file. Pastikan Anda mempertahankan baris-baris itu jika Anda mengganti file .htaccess selama peningkatan Drupal peningkatan.

0
Dan Halbert

Gunakan otentikasi HTTP. Cara ini dilakukan dengan Apache didokumentasikan di http://httpd.Apache.org/docs/2.2/howto/auth.html . Untuk instalasi multisite, bagian <Directory> dari <VirtualHost> akan menjadi tempat yang tepat untuk meletakkan arahan konfigurasi.

0
Oswald