HTAccessパスワード保護トリック

♦ でジェフ*スターによって投稿.htaccess,Security
Updated June30,2018•25comments

最近、読者は、他のすべての人にオープンアクセスを許可しながら、指定されたすべてのIPのディレクトリをパスワード保護する方法につ 私の記事では、愚かなhtaccessのトリックは、私は逆の場合ではなく、指定されたものを除くすべてのIPのためのディレクトリをパスワード保護する方法を示 この記事では、私は私の愚かなhtaccessのトリックの記事からいくつかを含む、他の有用なパスワード保護のトリックの多種多様と一緒にこの技術を実証し ジューシーなものに入る前に、我々はHTAccessのパスワード保護のいくつかの基本を確認します。

HTAccessパスワード保護はカスケード方式で動作します

始める前に、Apacheのさまざまなパスワード保護ディレクティブについて知っておく必要があることはほ まず、これらのパスワード保護のトリックは、それらが配置されているディレクトリに適用されます。 たとえば、サイト全体をパスワードで保護するには、サイトのwebアクセス可能なルートHTAccessファイルにこれらのトリックのいずれかを配置します。 HTAccessディレクティブは、すべてのサブディレクトリも保護されるように、カスケード方式でディレクトリ構造の下に適用されます。

パスワード保護のためには二つのファイルが必要です。htaccessとhtpasswd

二つ目に知っておく必要があるのは、ほとんどの場合、パスワード保護の実装には二つの部分があるということです。.htaccessファイルと.htpasswdファイル。 .htaccessファイルにはこの記事で提供されている甘いトリックが含まれ、.htpasswdファイルには必要なユーザー名と暗号化されたパスワードが含まれます。

あなたの.htpasswdファイルを生成するには、いくつかの方法があります。 Unixに慣れている場合は、単に”htpasswd“コマンドを実行することができます。 たとえば、次のコマンドを入力すると、/home/path/ディレクトリに作業用パスワードファイルが作成されます:

htpasswd -bc /home/path/.htpasswd username password

パスワードファイルをwebアクセス可能なルートディレクトリの上に配置することは、優れたセキ ファイルが作成された後にファイルを調べると、ファイルに含まれるのは次のような行だけです:

username:Mx1lbGn.nkP8

Unixコマンドを実行する代わりに、オンラインパスワードジェネレータを提供する200,000のオンラインサービスのいずれかを使用することをお勧めします。

.htpasswdファイルを作成する方法や場所に関係なく、関連するHTAccessファイルで使用するためにその場所を覚えておいてください。 はい、複数のディレクトリに配置された複数のHTAccessファイルには、1つの.htpasswdファイルを使用できます。

使用しているApacheのバージョンを知っている

以下の各例では、ディレクティブは<IfModule>コンテナ内に囲まれています。 これは、必要なApacheモジュールが利用できない場合やインストールされていない場合にサーバがクラッシュするのを防ぐためです。 一般的に、必要なモジュールが存在しますが、<IfModule>チェックは良い予防措置です。

この記事のパスワード保護方法のいずれかを実装する場合は、使用しているApacheのバージョンを再確認してから作業を開始してください。 この記事の例では、<IfModule>コンテナがmod_authモジュールの存在をチェックしているため、Apache1.3または2.0のいずれかを使用していることを前提としています。 したがって、Apache2.2(またはそれ以上)を実行している場合は、現在の<IfModule>コンテナを次のものに置き換えたいと思うでしょう:

<IfModule mod_authn_file.c></IfModule>

疑問がある場合は、ホストに尋ねるか、ShowIP Firefox拡張機能をインストールするか、サーバーのコントロールパネルを掘り下げてください。 また、わからない、気にしない、または理解できない場合は、使用したいメソッドから開閉<IfModule>タグを削除して、それを適切に呼び出します。 それらがなければ、サーバーに必要なモジュールが装備されていない場合は、単に500エラーメッセージを返します。

パスワードプロンプトのダイアログをカスタマイズできます

いくつかの甘いトリックに飛び込む前に知っておくべき最後のことは、この記事の各例の次の行を編集することによって、パスワードプロンプトに表示されるメッセージをカスタマイズできるということです:

AuthName "Username and password required"

引用符の中のテキストを変更することにより、あなたはパスワードプロンプトに希望する任意の言語を使用することができます。

だから今、私たちの冒険のこの時点で、我々はいくつかのジューシーなHTAccessのパスワード保護のトリックに飛び込む準備ができています。.

基本的なパスワード保護

あなたのサイトや任意のディレクトリをパスワード保護するには、関連するHTAccessファイルにこのコードを配置します:

# basic password protection<IfModule mod_auth.c> AuthUserFile /home/path/.htpasswd AuthName "Username and password required" AuthType Basic <Limit GET POST> Require valid-user </Limit></IfModule>

それはそれが得るほど基本的です。 パスワードファイルを作成し、最初の行にそのディレクトリを指定してください。 もっと面白いものに移りましょう。

OPEN-access for one IP,password-protect everyone else

この方法は、他の人にパスワードを介してアクセス権を与える機能を持つオープンアクセスが必要なプロジェクト開発中に素晴ら:

# password protect excluding specific ip<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from 111.222.333.444 Satisfy Any</IfModule>

保護したいディレクトリのHTAccessファイルにそのコードを配置することにより、指定されたIPのみがオープンアクセスを許可されます。

オープンアクセス複数のIp、他のすべての人をパスワードで保護

上記のコードは、他のすべての人を拒否しながら、複数のIpオープンアクセスを提供するた:

# password protect excluding specific ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from localhost Allow from 111.222.333.444 Allow from 555.666.777.888 Satisfy Any</IfModule>

必要な数だけIpを追加できます。 この方法は、次の条件が適用されるプロジェクト開発中に最適です:

  • プロジェクト開発は通常の訪問者のために非公開のままです
  • パスワードを提供することにより、クライアント(または誰でも)にアクセスを許可することができます
  • 開発チームのメンバーは、それぞれのマシンでオープンアクセス権を持っています

あなたのチームへの無制限のアクセスを提供することに加えて、以下のディレクティブを含めることにより、特定のwebサービスを念頭に置いておくこともできます(

Satisfy Any:

Allow from validator.w3.org
Allow from jigsaw.w3.org
Allow from google.com

特定のIp

のパスワード保護を持つすべての人のためのオープンアクセスこの方法は、悪意のあるIpのリストをブロックしたい場合など、さまざまな状況

# password protect only for specified ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 111.222.333.444 Deny from 555.666.777.888 Satisfy Any</IfModule>

必要な数のIPアドレスをリストすることができます。 それに応じてアドレスを切り捨てることによって、IPブロック全体から拒否することもできます。 たとえば、”999.888“で始まるIPアドレスから来るすべての人をブロックするには、次のディレクティブを追加します:

Deny from 999.888

これがどのように機能するかの詳細については、私の愚かなhtaccessのトリックの記事のこのセクションを参照してください。

特定のCIDR番号のパスワード保護を持つすべての人のためのオープンアクセス

前の方法と同様に、ここでは選択したCIDR番号からのみパスワードを要求す この方法は、RIPE、Optinetなどのメガスパマーをブロックするのに便利です。 たとえば、同じ最初のいくつかの数字で始まるアドレスのApacheDenyディレクティブの行の後に行を追加している場合は、それらのいずれかを選択してwhois Whoisの結果に記載されているのは、その特定のネットワークに関連付けられているすべてのIPアドレスを表すCIDR値です。 したがって、CIDRを介してブロックすることは、犯罪者のすべてのIPインスタンスがあなたのサイトにアクセスするのを雄弁に防ぐ効果的な方法です。 CIDRによるブロックの一般化された例を次に示します:

# password protect only for specified CIDR<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 10.1.0.0/16 Deny from 80.0.0/8 Satisfy Any</IfModule>

パスワードは、単一のファイルを保護

私はこの技術を無数の時間を使用しています。 単一のファイルをパスワードで保護するには、これをHTAccessファイルに追加するだけです:

# password protect single file<IfModule mod_auth.c> <Files "protected.html"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </Files></IfModule>

ここでは、”protected.html“という名前のファイルをaccessから保護しています。 ファイルは、適切なユーザー名とパスワードを提出した後にのみ利用可能になります。

複数のファイルをパスワードで保護する

複数のファイルを保護するために、この方法は非常に似ていますが、今回はApacheのFilesMatchディレクティブを使用しています。 これにより、必要な数のファイルを一覧表示することができます:

# password protect mulitple files<IfModule mod_auth.c> <FilesMatch "(protected\.html)|(passwords\.txt)"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>

この例では、”protected.html“と”passwords.txt“の2つのファイルをパスワードで保護しています。 さらに追加するには、ファイルのリストに”|(filename\.ext)“のインスタンスを追加するだけです。

複数のファイルタイプをパスワードで保護

この方法では、ApacheのFilesMatchディレクティブを使用して複数のファイルタイプをパスワードで保護しています。 ここに例があります:

# password protect mulitple file types<IfModule mod_auth.c> <FilesMatch "\.(inc|txt|log|dat|zip|rar)$"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>

このコードを配置すると、次の種類のファイルにアクセスするためのパスワードが必要になります: .inc, .txt, .log, .dat, .zip, と.rar。 あなたの必要性に適するためにカスタマイズして下さい。

単一のファイルを除くすべてのパスワード保護

単一のファイルへのアクセスを許可しながら、他のすべてをパスワード保護するためのこの強力な技:

# password protect everything except a single file<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <Files "open-access.html"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </Files></IfModule>

ルートディレクトリまたは任意の親ディレクトリに配置されると、このコードは”open-access.html“という名前のファイル以外のすべてをパスワードで保護します。

複数のファイルへのアクセスを許可しながらすべてを保護するために、代わりにApacheのFilesMatchディレクティブを使用することができます。 以下にアクセスを許可する例を示します”open-access-1.html“, “open-access-2.html“, と”open-access-3.html“:

# password protect everything except specified files<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <FilesMatch "(open-access-1.html)|(open-access-2.html)|(open-access-3.html)"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </FilesMatch></IfModule>

ファイルリストは次のように統合される場合がありますので注意してください:

<FilesMatch "open-access-\.html">

任意のファイルまたはファイルグループへのオープンアクセスを許可する別の方法は、HTAccessファイルに次のディレクティブを追加して、自分のディレク:

Allow from all
satisfy any

それをラップして

ご覧のように、Apacheのmod_auth機能により、必要なパスワード保護設定を設定することが可能になります。 特定のIPアドレスやドメインからのアクセスを防止することから、特定のファイルやディレクトリのみのアクセスを許可することまで、Apacheはファ また、特定のユーザーとグループの承認を設定するために利用できる多くの可能性にも至っていません。 私は別の記事のためにそれを保存すると思います。 それまでの間、Apacheの強力なmod_authの詳細については、公式文書をチェックしてください。

Jeff Starr

著者について
Jeff Starr=ウェブ開発者。 セキュリティスペシャリスト。 ワードプレスバフ。