開発中にサイトへのアクセスを制限する方法は?


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を含むより広範なアプローチを追加しました。
バート

1
ホット。簡単な答えも。できればもう一度投票します。
レスターピーボディ

これは、Drupal 8
DrCord

したがって、これがDrupal 7としてタグ付けされる理由
バート

4

Drupal 7を使用している場合、この目的でシールドモジュールを使用できます。単一の共有ユーザーとパスワードを認証します。

PHP認証シールド。Apache認証を使用して、サイトの単純なシールドを作成します。ユーザーが単純なユーザー名/パスワードを知らない場合、サイトを隠します。Drupalを「壁に囲まれた庭」として扱います。このモジュールは、HTTP認証で(開発)サイトを保護するのに役立ちます。


+1-車輪を再発明しないでください。これはすでに完了しており、さまざまなサーバー構成と問題を考慮しています。
アダムバルサム14

2

mod_authApacheセットアップに追加します。これは、ホスト(Linux、Windows)によって異なります。これにはモジュールのダウンロードが含まれる場合があり、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

Apacheを再起動します。利益。


ありがとう。このプロジェクトは共有ホスティングであり、httpd.confにアクセスできないため、このソリューションをテストすることはできません。ただし、これがマルチサイト環境でまったく機能するかどうかは疑問です。
ダフシェス

.htaccessdrupalルートのファイルにアクセスできますか?100%確信はありませんが、そこに置いてみてください。気を付けて、バートの解決策ははるかに良いようです:)
アレックスC

ダンへの私の返信を参照してください。.htaccessは変更できますが、マルチサイト構成でどのように役立つかわかりません。
ダフシェス

これは良い解決策ですが、ソーシャル共有機能をテストすることはできません。
スフジンダーシン


0

OPは、これは共有ホスティングに関するものであるとコメントしています。ほとんどの共有ホスティングは、cPanelまたはその他のコントロールパネルを提供します。これにより、ディレクトリの単純な.htaccessパスワード保護が実行されます。

この方法を使用して、開発中のサイトの最上位ディレクトリを保護しました。cPanelを使用してディレクトリを保護する場合は、「パスワード保護ディレクトリ」メニュー項目を探します。

Drupalをインストールする前に最上位ディレクトリを保護すると、cPanelはそのディレクトリに.htaccessファイルを作成します。そのファイルの内容に、Drupalが提供する.htaccessファイルを追加または追加します。Drupalのインストール後にディレクトリを保護する場合、cPanelは必要な行を既存のDrupal .htaccessファイルに追加するだけで、ファイルの残りの部分を邪魔しないと確信しています。Drupalのアップグレード中に.htaccessファイルを置き換える場合は、これらの行を必ず保存してください。


おかげで、私も実際にシェルにアクセスできます。しかし、マルチサイト構成で1つのサイトのみを保護したい場合、htaccess(またはhttpd.conf)を使用できますか?
ダフシェス

申し訳ありませんが、OPの複数サイトのコメントを見逃しました。マルチサイトは使用していませんが、どのように機能するかを調べました。Drupalのマルチサイトは、ここでのソリューションのうち、単一の最上位ディレクトリを使用するため、Bartのみが機能すると思います。たぶん、開発者サイトをメンテナンスモードで実行して、管理者以外の全員をロックアウトすることもできます。ヒントについてはこちらをご覧ください。
ダンハルバート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.