Como restringir o acesso ao site durante o desenvolvimento?


17

Estou criando um novo site baseado no Drupal 7.

O desenvolvimento será em um servidor acessível ao público. Estou trabalhando em um ambiente de vários sites.

Eu gostaria de bloquear totalmente o acesso ao site para qualquer pessoa, exceto usuários autorizados. Incluindo acesso ao nome do site, tema, etc ...

Eu usei o Secure Site para tarefas semelhantes antes. Ele fez autenticação no nível http e retornou 403 quando a autenticação falhou. Não possui uma versão D7.

Qual seria a maneira mais fácil de fazer isso?

Respostas:


15

Crie um módulo e cole o seguinte código no seu arquivo 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;
}

Isso usa autenticação HTTP e verifica o banco de dados Drupal quanto a nome de usuário e senha válidos.

Se você tiver algum problema com o PHP CLI, Drush ou cron, poderá adicionar o seguinte código no 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;
    }
  }

Palavra para o sábio, isso vai estragar completamente o seu ambiente Drush. Upvotes extras de mim se você criar uma solução alternativa para o Drush.
— Lester Peabody

Concluído, adicionou uma abordagem mais ampla que inclui o PHP CLI e o cron.php.
— 21613 Bart Bart

1
Quente. Resposta rápida também. Eu votaria novamente se pudesse.
— Lester Peabody

isso não funciona em todos com Drupal 8
— DrCord

Daí porque este é marcado como Drupal 7.
— Bart

4

Se você estiver usando o Drupal 7, o módulo Shield estará disponível para esse fim. Ele autentica um único usuário e senha compartilhados.

Escudo de autenticação do PHP. Ele cria um escudo simples para o site com autenticação Apache. Ele oculta os sites, se o usuário não souber um nome de usuário / senha simples. Ele lida com o Drupal como um "jardim murado". Este módulo ajuda a proteger seu site (dev) com autenticação HTTP.


+1 - Não reinvente a roda. Isso já foi feito e é responsável por diferentes configurações de servidor e drush.
— Adam Balsam

2

Adicionar mod_authà configuração do apache. Isso varia dependendo do seu host (linux, windows). Isso pode envolver o download de um módulo, pode envolver apenas descomentar uma linha no seu httpd.conf

 LoadModule auth_basic_module modules/mod_auth_basic.so

Crie um arquivo .htpasswd, usando o htpasswdcomando na pasta binários apache

 htpasswd -c user pass

Adicione o seguinte código à sua <DIRECTORY>declaração logo após a regra de reescrita dos URLs limpos:

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

Reinicie o apache. Lucro.


Obrigado. Não posso testar esta solução, pois este projeto está em hospedagem compartilhada e não tenho acesso ao httpd.conf. Gostaria de saber, no entanto, se isso pode funcionar em um ambiente de vários sites.
— Daphshez

você tem acesso ao .htaccessarquivo na raiz drupal? Não tenho 100% de certeza, mas você pode tentar colocá-lo lá. Mente-lhe, solução de Bart parece muito melhor :)
— Alex C

veja minha resposta para Dan. Posso alterar o .htaccess, mas não tenho certeza de como ele me ajuda em uma configuração de vários sites.
— Daphshez 09/09

Embora essa seja uma boa solução, você não pode testar os recursos de compartilhamento social com ela.
— Sukhjinder Singh


0

O OP comentou que isso é em hospedagem compartilhada. A maioria das hospedagem compartilhada fornece cPanel ou algum outro painel de controle, que oferece proteção simples por senha .htaccess para diretórios.

Eu protegi o diretório de nível superior de um site em desenvolvimento usando esse método. Se você usar o cPanel para proteger o diretório, procure o item de menu "Diretórios de proteção por senha".

Se você proteger o diretório de nível superior antes de instalar o Drupal, o cPanel criará um arquivo .htaccess nesse diretório. Anexe ou anexe o conteúdo desse arquivo ao arquivo .htaccess fornecido pelo Drupal. Se você proteger o diretório após a instalação do Drupal, tenho certeza de que o cPanel apenas adicionará as linhas necessárias ao arquivo .htaccess Drupal existente e não perturbará o restante do arquivo. Apenas certifique-se de preservar essas linhas se substituir o arquivo .htaccess durante uma atualização do Drupal.


Obrigado, eu também tenho acesso ao shell. Mas posso usar o htaccess (ou httpd.conf, nesse caso) quando quiser proteger apenas um site em uma configuração de vários sites?
— Daphshez 09/09

Desculpe, perdi o comentário de vários sites no OP. Não uso vários sites, mas procurei como ele funciona. Como o multi-site do Drupal usa um único diretório de nível superior, das soluções aqui, acho que apenas o Bart funcionaria. Talvez você também possa executar o site dev no modo de manutenção, para bloquear todos, exceto o administrador. Veja aqui algumas dicas.
— Dan Halbert
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.