it-swarm.it

Come limitare l'accesso al sito durante lo sviluppo?

Sto creando un nuovo Drupal 7.

Lo sviluppo sarà su un server accessibile al pubblico. Sto lavorando in un ambiente multi-sito.

Vorrei bloccare totalmente l'accesso al sito a chiunque, tranne agli utenti autorizzati. Compreso l'accesso al nome del sito, tema, ecc ...

Ho usato Sito sicuro per attività simili prima. Ha eseguito l'autenticazione a livello http e ha restituito 403 quando l'autenticazione non è riuscita. Non ha una versione D7.

Quale sarebbe il modo più semplice per farlo?

16
daphshez

Crea un modulo e incolla il seguente codice nel file del modulo:

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

Questo utilizza l'autenticazione HTTP e controlla il Drupal per un nome utente e una password validi.

In caso di problemi con PHP CLI, Drush o cron, è possibile aggiungere il seguente codice nel 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

Se stai usando Drupal 7 il modulo Shield è disponibile per questo scopo. Autentica un singolo utente e password condivisi.

Scudo di autenticazione PHP. Crea un semplice scudo per il sito con autenticazione Apache. Nasconde i siti, se l'utente non conosce un semplice nome utente/password. Gestisce Drupal come un "giardino recintato". Questo modulo ti aiuta a proteggere il tuo sito (dev) con l'autenticazione HTTP.

4
Johnathan Elmore

Inserisci mod_auth alla configurazione di Apache. Questo varia a seconda del tuo host (Linux, Windows). Ciò può comportare il download di un modulo, può comportare il solo decommentamento di una riga nel tuo httpd.conf

 LoadModule auth_basic_module modules/mod_auth_basic.so

Crea un file .htpasswd, usando il comando htpasswd nella cartella binari di Apache

 htpasswd -c user pass

Aggiungi il seguente codice al tuo <DIRECTORY> istruzione subito dopo la regola di riscrittura degli URL puliti:

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

Riavvia Apache. Profitto.

2
Alex C

L'OP ha commentato che si tratta di hosting condiviso. La maggior parte dell'hosting condiviso fornisce cPanel o qualche altro pannello di controllo, che farà una semplice protezione con password .htaccess per le directory.

Ho protetto la directory di livello superiore di un sito in fase di sviluppo utilizzando questo metodo. Se si utilizza cPanel per proteggere la directory, cercare la voce di menu "Directory di protezione password".

Se proteggi la directory di livello superiore prima di installare Drupal, cPanel creerà un file .htaccess in quella directory. Aggiungi o anteponi il contenuto di quel file con il file .htaccess che Drupal fornisce. Se proteggi la directory dopo aver installato Drupal, sono abbastanza sicuro che cPanel aggiungerà solo le righe necessarie a quelle esistenti Drupal .htaccess file e non disturbare il resto del file. Assicurati solo di conservare quelle righe se sostituisci il file .htaccess durante un Drupal upgrade.

0
Dan Halbert

Usa autenticazione HTTP. Il modo in cui ciò viene fatto con Apache è documentato su http://httpd.Apache.org/docs/2.2/howto/auth.html . Per un'installazione su più siti, la sezione <Directory> della <VirtualHost> sarebbe un posto appropriato dove inserire le direttive di configurazione.

0
Oswald