.htaccess設定を使用して自分のサイトからのパスをブロックしたいとします。特定のIPのセットだけが、基本認証を使用して認証された後、URLからその特定のパスにアクセスできるという考えがあります。.htaccess基本認証とIP制限の組み合わせ
注:これはパスであり、ページまたはディレクトリではありません。私たちはウェブサービスを保護しようとしているので、URLへのポストコールしかありません。
私は、URL example.com/rest
をブロックし、IPに基づいてそのURLの背後にあるすべてのものをブロックしたいと思います。したがって、example.com/rest/foo
とexample.com/rest/foo/bar
はブロックする必要があります。
アプリケーションからの他のすべてのパスは、基本的な認証なしで機能し続ける必要があります。
IPブロック部分は前にquestionで解決されました。
基本的な構成(ブロックする部分は.htaccessには多くありますが、この質問には関係ありません)。以下で見つけることができます。
SetEnvIf Request_URI "/rest(/.*)?$" rest_uri
# Check on what subdomain we are.
SetEnvIf Host ^local\. None_Prod_Env
# Static
SetEnvIf AH_CLIENT_IP ^123\.123\.123\.123$ Allow_Host
# Range
SetEnvIf AH_CLIENT_IP ^123\.123\.123\. Allow_Host
Order deny,allow
Deny from all
Allow from env=!rest_uri
Allow from env=Allow_Host
Allow from env=None_Prod_Env
ブロック以上のように、構成/休憩に/ *ではなく、非残りパスへのすべてのアクセスは、ユーザがIP X(Allow_Host変数)から来ることができますし、我々はこのケースではどれも生産環境がローカル許します。
私はそうのような基本的な認証で、この機能を拡張しようとしました:
SetEnvIf Request_URI "/rest(/.*)?$" rest_uri
SetEnvIfNoCase Request_URI "/rest(/.*)?$" require_auth=true
# ... Allow Host stuff and none prod stuff ...
Order deny,allow
Deny from all
Allow from env=!rest_uri
Allow from env=Allow_Host
Allow from env=None_Prod_Env
AuthName "Password Protected"
AuthType Basic
AuthBasicProvider file
AuthUserFile /var/www/html/.htpasswd
Require valid-user
しかし、これはすべてのページ上だけではなく/休憩/ * URLの基本的な認証が生じました。私はそれをたくさん演奏しましたが、それを理解できませんでした。 SetEnvIfNoCase
からSetEnvIf
に変更することも役に立ちませんでした。
注:当社のサーバーでは、Apache 2.2.22が動作しています。
それは部分的に動作させるということにではないが、それは、認証画面が表示されるでしょうホワイトリストに登録されたIPですが、ホワイトリストに登録されているIPの場合は、認証が表示されません。 – Bram
認証と有効な両方のIPが必要ですか? 'Satisfy all 'を試すことができます –
ユーザはホワイトリストに登録されたIP上にあり、正常に認証されているか、local.example.com/restにいるときに認証とIP制限をバイパスできます。最初の部分は現在より重要です。 – Bram