วิธีการ จำกัด การเข้าถึงเว็บไซต์ในระหว่างการพัฒนา?


17

ฉันกำลังสร้างเว็บไซต์ใหม่ที่ใช้ Drupal 7

การพัฒนาจะอยู่บนเซิร์ฟเวอร์ที่สาธารณชนสามารถเข้าถึงได้ ฉันทำงานในสภาพแวดล้อมที่มีหลายไซต์

ฉันต้องการปิดกั้นการเข้าถึงเว็บไซต์ให้กับทุกคน & ทุกสิ่งยกเว้นผู้ใช้ที่ได้รับอนุญาต รวมถึงการเข้าถึงชื่อเว็บไซต์ธีม ฯลฯ ...

ฉันใช้Secure Siteสำหรับงานที่คล้ายกันมาก่อน มันทำการตรวจสอบความถูกต้องระดับ http และส่งคืน 403 เมื่อการตรวจสอบล้มเหลว ไม่มีรุ่น D7

อะไรจะเป็นวิธีที่ง่ายที่สุดในการทำเช่นนี้?

คำตอบ:


15

ทำโมดูลและวางรหัสต่อไปนี้ในไฟล์โมดูลของคุณ:

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

สิ่งนี้ใช้การรับรองความถูกต้อง HTTP และตรวจสอบฐานข้อมูล Drupal สำหรับชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง

หากคุณมีปัญหาใด ๆ กับ PHP CLI, Drush หรือ cron คุณสามารถเพิ่มรหัสต่อไปนี้ในเบ็ด:

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

คำพูดที่ฉลาดนี่จะทำให้สภาพแวดล้อมของ Drush สมบูรณ์ upvotes พิเศษจากฉันถ้าคุณสร้างวิธีแก้ปัญหา Drush
Lester Peabody

เสร็จสิ้นเพิ่มวิธีการที่กว้างขึ้นซึ่งรวมถึง PHP CLI และ cron.php
บาร์ต

1
ร้อน. คำตอบอย่างรวดเร็วเช่นกัน ฉันจะโหวตมันอีกครั้งถ้าทำได้
เลสเตอร์พีบอดี

สิ่งนี้ไม่สามารถใช้งานได้กับ Drupal 8
DrCord

เหตุใดจึงถูกแท็กเป็น Drupal 7
Bart

4

หากคุณกำลังใช้ Drupal 7 โมดูลShieldมีให้เพื่อจุดประสงค์นี้ มันพิสูจน์ตัวตนผู้ใช้และรหัสผ่านที่ใช้ร่วมกันเดียว

โล่รับรองความถูกต้อง PHP มันสร้างเกราะป้องกันอย่างง่ายสำหรับไซต์ที่มีการพิสูจน์ตัวตน Apache มันซ่อนเว็บไซต์หากผู้ใช้ไม่ทราบชื่อผู้ใช้ / รหัสผ่านที่ง่าย มันจัดการ Drupal เป็น "สวนมีกำแพง" โมดูลนี้ช่วยให้คุณปกป้องไซต์ (dev) ของคุณด้วยการตรวจสอบสิทธิ์ HTTP


+1 - อย่าประดิษฐ์ล้อใหม่ สิ่งนี้เสร็จสิ้นแล้วและบัญชีสำหรับการกำหนดค่าเซิร์ฟเวอร์และ drush ที่แตกต่างกัน
Adam Balsam

2

เพิ่มmod_authในการตั้งค่า apache สิ่งนี้จะแตกต่างกันไปขึ้นอยู่กับโฮสต์ของคุณ (linux, windows) สิ่งนี้อาจเกี่ยวข้องกับการดาวน์โหลดโมดูลมันอาจเกี่ยวข้องกับการไม่ใส่เครื่องหมายบรรทัดใน httpd.conf ของคุณ

 LoadModule auth_basic_module modules/mod_auth_basic.so

สร้างไฟล์. htpasswd โดยใช้htpasswdคำสั่งในโฟลเดอร์ apache binaries

 htpasswd -c user pass

เพิ่มรหัสต่อไปนี้ลงในใบแจ้งยอดของคุณ<DIRECTORY>ทันทีหลังจากที่กฎการเขียน URL แบบใหม่ทั้งหมด:

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

รีสตาร์ท apache กำไร.


ขอบคุณ ฉันไม่สามารถทดสอบโซลูชันนี้ได้เนื่องจากฉันโครงการนี้อยู่ในพื้นที่สาธารณะและฉันไม่สามารถเข้าถึง httpd.conf ฉันสงสัยว่ามันสามารถทำงานได้ในสภาพแวดล้อมที่หลากหลายหรือไม่
daphshez

คุณมีสิทธิ์เข้าถึง.htaccessไฟล์ในรูท drupal หรือไม่? ฉันไม่แน่ใจ 100% แต่คุณสามารถลองใส่มันได้ โปรดทราบว่าวิธีแก้ปัญหาของ Bart นั้นดีกว่ามาก :)
อเล็กซ์ C

เห็นฉันตอบกลับไปที่แดน ฉันสามารถเปลี่ยน. htaccess ได้ แต่ฉันไม่แน่ใจว่าจะช่วยฉันในการกำหนดค่าแบบหลายไซต์ได้อย่างไร
daphshez

แม้ว่านี่จะเป็นโซลูชันที่ดี แต่คุณไม่สามารถทดสอบคุณลักษณะการแบ่งปันทางสังคมด้วยได้
Sukhjinder Singh

0

ใช้การรับรองความถูกต้อง HTTP วิธีนี้จะทำกับ Apache เป็นเอกสารที่http://httpd.apache.org/docs/2.2/howto/auth.html สำหรับการติดตั้งแบบหลายไซต์ส่วน<Directory>ของ<VirtualHost>จะเป็นสถานที่ที่เหมาะสมในการกำหนดคำสั่งการกำหนดค่า


0

OP ได้ให้ความเห็นว่านี่เป็นโฮสติ้งที่ใช้ร่วมกัน โฮสติ้งที่ใช้ร่วมกันส่วนใหญ่มี cPanel หรือแผงควบคุมอื่นซึ่งจะทำการป้องกันรหัสผ่าน. htaccess อย่างง่ายสำหรับไดเรกทอรี

ฉันได้รับการปกป้องไดเรกทอรีระดับบนสุดของไซต์ภายใต้การพัฒนาโดยใช้วิธีนี้ หากคุณใช้ cPanel เพื่อป้องกันไดเรกทอรีให้มองหารายการเมนู "รหัสผ่านป้องกันไดเรกทอรี"

หากคุณป้องกันไดเรกทอรีระดับบนสุดก่อนที่คุณจะติดตั้ง Drupal cPanel จะสร้างไฟล์. htaccess ในไดเรกทอรีนั้น ผนวกหรือผนวกเนื้อหาของไฟล์นั้นด้วยไฟล์. htaccess ที่ Drupal จัดให้ หากคุณป้องกันไดเรกทอรีหลังจากติดตั้ง Drupal ฉันค่อนข้างแน่ใจว่า cPanel จะเพิ่มบรรทัดที่ต้องการให้กับไฟล์ Drupal .htaccess ที่มีอยู่และไม่รบกวนส่วนที่เหลือของไฟล์ ตรวจสอบให้แน่ใจว่าคุณเก็บรักษาบรรทัดเหล่านั้นไว้หากคุณแทนที่ไฟล์. htaccess ในระหว่างการอัพเกรด Drupal


ขอบคุณฉันมีสิทธิ์เข้าถึงเชลล์ด้วย แต่ฉันสามารถใช้ htaccess (หรือ httpd.conf สำหรับเรื่องนั้น) เมื่อฉันต้องการปกป้องไซต์เดียวในการกำหนดค่าหลายไซต์ได้หรือไม่
daphshez

ขออภัยฉันพลาดความคิดเห็นหลายเว็บไซต์ใน OP ฉันไม่ได้ใช้หลายเว็บไซต์ แต่ฉันค้นหาว่ามันทำงานอย่างไร เนื่องจาก Drupal multi-site ใช้ dir ระดับบนสุดของโซลูชันที่นี่ฉันคิดว่ามีเพียง Bart's เท่านั้นที่จะใช้งานได้ บางทีคุณอาจเรียกใช้ไซต์ dev ในโหมดบำรุงรักษาเพื่อล็อกเอาต์ทุกคนยกเว้นผู้ดูแลระบบ ดูที่นี่สำหรับคำแนะนำบางอย่าง
Dan Halbert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.