개발 중에 사이트에 대한 액세스를 제한하는 방법은 무엇입니까?


17

새로운 Drupal 7 기반 사이트를 만들고 있습니다.

개발은 공개적으로 액세스 가능한 서버에서 이루어집니다. 다중 사이트 환경에서 작업하고 있습니다.

승인 된 사용자 이외의 다른 사람에 대한 사이트 액세스를 완전히 차단하고 싶습니다. 사이트 이름, 테마 등에 대한 액세스 포함

전에 비슷한 작업에 보안 사이트 를 사용했습니다 . 인증에 실패하면 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 환경을 완전히 망칠 것입니다. Drush 해결 방법을 만들면 추가 의견이 있습니다.
레스터 피바디

PHP CLI 및 cron.php를 포함하는보다 광범위한 접근 방식을 추가했습니다.
Bart

1
뜨거운. 빠른 답변도 있습니다. 가능하다면 다시 투표를 했어요.
레스터 피바디

Drupal 8
DrCord

그러므로 이것이 왜 Drupal 7로 태그되었습니다.
Bart

4

Drupal 7을 사용하는 경우이 목적으로 Shield 모듈을 사용할 수 있습니다. 단일 공유 사용자 및 비밀번호를 인증합니다.

PHP 인증 방패. Apache 인증을 사용하여 사이트에 간단한 방패를 만듭니다. 사용자가 간단한 사용자 이름 / 암호를 모르면 사이트를 숨 깁니다. 그것은 Drupal을 "벽으로 둘러싸인 정원"으로 취급합니다. 이 모듈을 사용하면 HTTP 인증으로 (dev) 사이트를 보호 할 수 있습니다.


+1-바퀴를 재발 명하지 마십시오. 이것은 이미 수행되었으며 다른 서버 구성 및 drush를 설명합니다.
Adam Balsam

2

mod_auth아파치 설정에 추가하십시오 . 호스트 (리눅스, 윈도우)에 따라 다릅니다. 여기에는 모듈 다운로드가 포함될 수 있으며 httpd.conf에서 줄을 주석 해제하는 것이 포함될 수 있습니다.

 LoadModule auth_basic_module modules/mod_auth_basic.so

htpasswdapache binaries 폴더 의 명령을 사용하여 .htpasswd 파일을 작성하십시오.

 htpasswd -c user pass

<DIRECTORY>클린 URL 재 작성 규칙 직후에 다음 코드를 명령문에 추가하십시오 .

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

아파치를 다시 시작하십시오. 이익.


감사. 이 프로젝트가 공유 호스팅에 있고 httpd.conf에 액세스 할 수 없으므로이 솔루션을 테스트 할 수 없습니다. 그러나 이것이 다중 사이트 환경에서 전혀 효과가 있는지 궁금합니다.
daphshez

.htaccessdrupal root 에있는 파일에 액세스 할 수 있습니까? 100 % 확실하지는 않지만 거기에 넣을 수 있습니다. 바트의 솔루션이 훨씬 나아 보인다 :)
Alex C

Dan에게 답장을 보자. .htaccess를 변경할 수 있지만 다중 사이트 구성에서 어떻게 도움이되는지 잘 모르겠습니다.
daphshez

이것이 좋은 해결책이지만 소셜 공유 기능을 테스트 할 수는 없습니다.
Sukhjinder Singh


0

OP는 이것이 공유 호스팅에 있다고 언급했습니다. 대부분의 공유 호스팅은 cPanel 또는 다른 제어판을 제공하며 디렉토리에 대한 간단한 .htaccess 비밀번호 보호를 수행합니다.

이 방법을 사용하여 개발중인 사이트의 최상위 디렉토리를 보호했습니다. cPanel을 사용하여 디렉토리를 보호하는 경우 "Password Protect Directories"메뉴 항목을 찾으십시오.

Drupal을 설치하기 전에 최상위 디렉토리를 보호하면 cPanel이 해당 디렉토리에 .htaccess 파일을 만듭니다. Drupal이 제공하는 .htaccess 파일로 해당 파일의 내용을 추가하거나 추가하십시오. Drupal을 설치 한 후 디렉토리를 보호한다면 cPanel이 기존 Drupal .htaccess 파일에 필요한 행을 추가하고 나머지 파일을 방해하지 않을 것입니다. Drupal 업그레이드 중에 .htaccess 파일을 교체 할 경우 해당 행을 유지하십시오.


고맙게도 실제로 쉘 액세스 권한이 있습니다. 그러나 다중 사이트 구성에서 하나의 사이트 만 보호하려는 경우 htaccess (또는 그 문제에 대해서는 httpd.conf)를 사용할 수 있습니까?
daphshez

죄송합니다. OP에서 여러 사이트 의견이 누락되었습니다. 다중 사이트를 사용하지 않지만 작동 방식을 찾았습니다. Drupal 멀티 사이트는 단일 최상위 디렉토리를 사용하기 때문에 Bart 만 작동한다고 생각합니다. 어쩌면 개발자 사이트를 유지 관리 모드로 실행하여 관리자 이외의 모든 사람을 잠글 수도 있습니다. 힌트를 보려면 여기 를 참조 하십시오 .
Dan Halbert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.