Geliştirme sırasında siteye erişim nasıl kısıtlanır?


17

Yeni bir Drupal 7 tabanlı site oluşturuyorum.

Geliştirme, herkesin erişebileceği bir sunucuda olacaktır. Çok sahalı bir ortamda çalışıyorum.

Siteye erişimi yetkili kullanıcılar dışında herhangi bir şeye tamamen engellemek istiyorum. Site adına erişim, tema vb. Dahil ...

Daha önce benzer görevler için Güvenli Site kullandım . Http düzeyinde kimlik doğrulama yaptı ve kimlik doğrulama başarısız olduğunda 403 döndürdü. D7 sürümü yok.

Bunu yapmanın en kolay yolu ne olurdu?

Yanıtlar:


15

Bir modül yapın ve aşağıdaki kodu modül dosyanıza yapıştırın:

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

Bu, HTTP Kimlik Doğrulaması kullanır ve Drupal Veritabanını geçerli bir kullanıcı adı ve şifre için kontrol eder.

PHP CLI, Drush veya cron ile ilgili herhangi bir sorun yaşarsanız, kancaya aşağıdaki kodu ekleyebilirsiniz:

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

Bilge bir kelime, bu tamamen Drush ortamınızı vidalayacak. Bir Drush geçici çözümü oluşturursanız benden fazladan oylar alırsınız.
Lester Peabody

Tamam, PHP CLI ve cron.php içeren daha geniş bir yaklaşım ekledi.
Bart

1
Sıcak. Hızlı cevap da. Yapabilirsem tekrar oy verirdim.
Lester Peabody

bu Drupal 8 ile çalışmaz
DrCord

Bu yüzden bu neden Drupal 7 olarak etiketlenir
Bart

4

Drupal 7 kullanıyorsanız Shield modülü bu amaçla kullanılabilir. Tek bir paylaşılan kullanıcının ve parolanın kimliğini doğrular.

PHP Kimlik Doğrulama kalkanı. Apache kimlik doğrulaması ile site için basit bir kalkan oluşturur. Kullanıcı basit bir kullanıcı adı / şifre bilmiyorsa siteleri gizler. Drupal'ı "duvarlı bahçe" olarak ele alır. Bu modül, (dev) sitenizi HTTP kimlik doğrulaması ile korumanıza yardımcı olur.


+1 - Tekerleği yeniden icat etme. Bu zaten yapılmış ve farklı sunucu yapılandırmaları ve drush açıklar.
Adam Balsam

2

mod_authApache kurulumuna ekleyin . Bu, ana makinenize (linux, pencereler) bağlı olarak değişir. Bu, bir modül indirmeyi içerebilir, httpd.conf dosyasında yalnızca bir satırın kaldırılmasını içerebilir.

 LoadModule auth_basic_module modules/mod_auth_basic.so

htpasswdApache ikili dosyalar klasöründeki komutu kullanarak bir .htpasswd dosyası oluşturun

 htpasswd -c user pass

<DIRECTORY>Temiz URL'leriniz yeniden yazma kuralından hemen sonra ifadenize aşağıdaki kodu ekleyin :

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

Apache'yi yeniden başlatın. Kar.


Teşekkürler. Bu proje paylaşılan barındırma olduğu için bu çözümü test edemiyorum ve httpd.conf'a erişimim yok. Ancak bunun çok tesisli bir ortamda işe yarayıp yaramayacağını merak ediyorum.
daphshez

.htaccessdrupal kökünden dosyaya erişiminiz var mı? % 100 emin değilim, ama oraya koymayı deneyebilirsiniz. Dikkat edin, Bart'ın çözümü çok daha iyi görünüyor :)
Alex C

Dan'a cevabımı gör. .Htaccess'i değiştirebilirim, ancak çoklu site yapılandırmasında bana nasıl yardımcı olduğundan emin değilim.
daphshez

Her ne kadar bu iyi bir çözüm olsa da, bununla sosyal paylaşım özelliklerini test edemezsiniz.
Sukhjinder Singh


0

OP bu paylaşılan barındırma olduğunu yorumladı. Çoğu paylaşılan barındırma, dizinler için basit .htaccess parola koruması yapacak cPanel veya başka bir kontrol paneli sağlar.

Bu yöntemi kullanarak geliştirilmekte olan bir sitenin üst düzey dizinini korudum. Dizini korumak için cPanel kullanıyorsanız, "Parola Koruma Dizinleri" menü öğesini bulun.

Drupal'ı yüklemeden önce üst düzey dizini korursanız, cPanel bu dizinde bir .htaccess dosyası oluşturur. Drupal'ın sağladığı .htaccess dosyasıyla bu dosyanın içeriğini ekleyin veya başına ekleyin. Drupal'ı yükledikten sonra dizini korursanız, cPanel'in yalnızca gereken satırları mevcut Drupal .htaccess dosyasına ekleyeceğinden ve dosyanın geri kalanını rahatsız etmeyeceğinden eminim. Drupal yükseltme sırasında .htaccess dosyasını değiştirirseniz bu satırları koruduğunuzdan emin olun.


Teşekkürler, aslında kabuk erişimim de var. Ancak çok siteli bir yapılandırmada yalnızca bir siteyi korumak istediğimde htaccess (veya bu konuda httpd.conf) kullanabilir miyim?
daphshez

Üzgünüm, OP çok site yorum cevapsız. Çok siteli kullanmıyorum, ancak nasıl çalıştığını araştırdım. Drupal çok sahalı tek bir üst düzey dir, buradaki çözümlerden yararlandığından, sadece Bart'ın işe yarayacağını düşünüyorum. Belki de yönetici dışında herkesi kilitlemek için geliştirici sitesini bakım modunda çalıştırabilirsiniz. Bazı ipuçları için buraya bakın .
Dan Halbert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.