Làm thế nào để hạn chế quyền truy cập vào trang web trong quá trình phát triển?


17

Tôi đang tạo một trang web dựa trên Drupal 7 mới.

Sự phát triển sẽ là trên một máy chủ có thể truy cập công khai. Tôi đang làm việc trong một môi trường nhiều trang web.

Tôi muốn chặn hoàn toàn quyền truy cập vào trang web cho bất kỳ ai & bất cứ ai trừ người dùng được ủy quyền. Bao gồm quyền truy cập vào tên trang web, chủ đề, v.v ...

Tôi đã sử dụng Trang web bảo mật cho các nhiệm vụ tương tự trước đây. Nó đã xác thực cấp http và trả về 403 khi xác thực thất bại. Nó không có phiên bản D7.

Điều gì sẽ là cách dễ nhất để làm điều này?

Câu trả lời:


15

Tạo một mô-đun và dán mã sau vào tệp mô-đun của bạ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;
}

Điều này sử dụng Xác thực HTTP và kiểm tra Cơ sở dữ liệu Drupal để biết tên người dùng và mật khẩu hợp lệ.

Nếu bạn có bất kỳ vấn đề nào với PHP CLI, Drush hoặc cron, bạn có thể thêm mã sau vào 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;
    }
  }

Nói cho khôn ngoan, điều này sẽ hoàn toàn làm hỏng môi trường Drush của bạn. Nâng cấp thêm từ tôi nếu bạn tạo một cách giải quyết khác.
Lester Peabody

Xong, thêm một cách tiếp cận rộng hơn bao gồm PHP CLI và cron.php.
Bart

1
Nóng bức. Trả lời nhanh quá. Tôi sẽ bình chọn lại nếu tôi có thể.
Lester Peabody

điều này hoàn toàn không hoạt động với Drupal 8
DrCord

Do đó, tại sao điều này được gắn thẻ là Drupal 7.
Bart

4

Nếu bạn đang sử dụng Drupal 7, mô-đun Shield có sẵn cho mục đích này. Nó xác thực một người dùng, chia sẻ và mật khẩu.

Lá chắn xác thực PHP. Nó tạo ra một lá chắn đơn giản cho trang web với xác thực Apache. Nó ẩn các trang web, nếu người dùng không biết tên người dùng / mật khẩu đơn giản. Nó xử lý Drupal như một "khu vườn có tường". Mô-đun này giúp bạn bảo vệ trang web (dev) của mình bằng xác thực HTTP.


+1 - Không phát minh lại bánh xe. Điều này đã được thực hiện và các tài khoản cho các cấu hình máy chủ và drush khác nhau.
Adam Balsam

2

Thêm mod_authvào thiết lập apache. Điều này thay đổi tùy thuộc vào máy chủ của bạn (linux, windows). Điều này có thể liên quan đến việc tải xuống một mô-đun, nó có thể liên quan đến việc bỏ ghi chú một dòng trong httpd.conf của bạn

 LoadModule auth_basic_module modules/mod_auth_basic.so

Tạo một tệp .htpasswd, sử dụng htpasswdlệnh trong thư mục nhị phân apache

 htpasswd -c user pass

Thêm mã sau vào <DIRECTORY>tuyên bố của bạn ngay sau quy tắc viết lại URL sạch của bạn:

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

Khởi động lại apache. Lợi nhuận.


Cảm ơn. Tôi không thể kiểm tra giải pháp này vì dự án này nằm trong dịch vụ lưu trữ được chia sẻ và tôi không có quyền truy cập vào httpd.conf. Tuy nhiên, tôi tự hỏi nếu điều này có thể làm việc ở tất cả trong một môi trường nhiều trang web.
daphshez

Bạn có quyền truy cập vào .htaccesstập tin trong root drupal? Tôi không chắc chắn 100%, nhưng bạn có thể thử đặt nó ở đó. Nhắc bạn, giải pháp của Bart có vẻ tốt hơn rất nhiều :)
Alex C

xem trả lời của tôi cho Dan. Tôi có thể thay đổi .htaccess, nhưng tôi không chắc nó giúp tôi như thế nào trong cấu hình nhiều trang.
daphshez

Mặc dù đây là giải pháp tốt nhưng bạn không thể kiểm tra các tính năng chia sẻ xã hội với nó.
Sukhjinder Singh


0

OP đã nhận xét rằng đây là trên chia sẻ lưu trữ. Hầu hết lưu trữ chia sẻ cung cấp cPanel hoặc một số bảng điều khiển khác, sẽ thực hiện bảo vệ mật khẩu .htaccess đơn giản cho các thư mục.

Tôi đã bảo vệ thư mục cấp cao nhất của một trang web đang được phát triển bằng phương pháp này. Nếu bạn sử dụng cPanel để bảo vệ thư mục, hãy tìm mục menu "Mật khẩu bảo vệ mật khẩu".

Nếu bạn bảo vệ thư mục cấp cao nhất trước khi cài đặt Drupal, cPanel sẽ tạo tệp .htaccess trong thư mục đó. Nối hoặc thêm vào nội dung của tệp đó với tệp .htaccess mà Drupal cung cấp. Nếu bạn bảo vệ thư mục sau khi cài đặt Drupal, tôi khá chắc chắn cPanel sẽ chỉ thêm các dòng cần thiết vào tệp Drupal .htaccess hiện có và không làm phiền phần còn lại của tệp. Chỉ cần đảm bảo bạn bảo toàn các dòng đó nếu bạn thay thế tệp .htaccess trong quá trình nâng cấp Drupal.


Cảm ơn, tôi thực sự có quyền truy cập shell. Nhưng tôi có thể sử dụng htaccess (hoặc httpd.conf, cho vấn đề đó) khi tôi chỉ muốn bảo vệ một trang web trong cấu hình nhiều trang web không?
daphshez

Xin lỗi, tôi đã bỏ lỡ bình luận nhiều trang web trong OP. Tôi không sử dụng nhiều trang web, nhưng tôi đã tìm kiếm cách nó hoạt động. Vì nhiều trang web của Drupal sử dụng một thư mục cấp cao nhất, nên các giải pháp ở đây, tôi nghĩ chỉ có Bart mới hoạt động. Có lẽ bạn cũng có thể chạy trang dev trong chế độ bảo trì, để khóa tất cả mọi người trừ quản trị viên. Xem ở đây cho một số gợi ý.
Dan Halbert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.