drupal 7 – ¿Cómo restringir el acceso al sitio durante el desarrollo?

Pregunta:

Estoy creando un nuevo sitio basado en Drupal 7.

El desarrollo se realizará en un servidor de acceso público. Trabajo en un entorno de varios sitios.

Me gustaría bloquear totalmente el acceso al sitio a cualquier persona y cualquier cosa que no sean usuarios autorizados. Incluyendo acceso al nombre del sitio, tema, etc …

Usé Secure Site para tareas similares antes. Hizo autenticación de nivel http y devolvió 403 cuando la autenticación falló. No tiene versión D7.

¿Cuál sería la forma más sencilla de hacer esto?

Respuesta:

Cree un módulo y pegue el siguiente código en su archivo de módulo:

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

Esto usa autenticación HTTP y verifica la base de datos de Drupal para un nombre de usuario y contraseña válidos.

Si tiene algún problema con PHP CLI, Drush o cron, puede agregar el siguiente código en el gancho:

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

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım