ApacheでHTTP_REFERERを使用してサーブレットページへのユーザーアクセスをブロックする方法

ウェブアプリケーションが成長するにつれて、機密ページを保護し、不正アクセスから守る必要性も高まります。特に自動化されたボットからのアクセスが問題です。特定のサーブレットページへの直接アクセスをブロックしたいが、アプリケーションサーバーを変更する能力がない場合、ApacheのHTTP_REFERERヘッダーを利用することが解決策の一部となるでしょう。

この記事では、.htaccessファイルでHTTP_REFERERを使用してアクセスを効果的にブロックする方法を探ります。ステップを分解し、目標達成のための明確な例を提供します。

HTTP_REFERERの理解

HTTP_REFERERは、要求されているリソースにリンクしているウェブページのアドレスを特定するHTTPヘッダーです。言い換えれば、特定のページにアクセスする前にユーザーがどこから来たのかをサーバーに知らせるものです。

なぜHTTP_REFERERを使用してアクセスをブロックするのか?

  1. セキュリティ対策: 完全ではありませんが、不正アクセスに対する初期のバリアとして機能します。
  2. 実装の容易さ: ウェブサーバーの制御ができるが、アプリケーションロジックを変更できない場合に実用的なアプローチです。
  3. 自動リクエストの防止: 外部ソースやボットからの直接リクエストをブロックすることは、フォームを安全に保ち、正当な手段でのみ機能させるために重要です。

.htaccessリライトルールの設定

HTTP_REFERERに基づいてアクセスをブロックするには、.htaccessファイルにルールを追加する必要があります。以下は、ルールの効果的な構造の例です。

基本的なリライトルール

次のようなシンプルなルールから始めることができます:

RewriteEngine on 

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+ - [F]

説明:

  • RewriteEngine on: リライトエンジンを有効にします。
  • RewriteCondは、HTTP_REFERERが指定されたサイトと一致しないかを確認します。
  • RewriteRuleは、servlet1またはservlet2へのリクエストを対象とします。

拡張されたリライトルール

ただし、サイトから来る正当なリクエストのみを許可し、クエリ文字列のあるリクエストをブロックするためには、より複雑なロジックが必要です:

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

拡張ルールの内訳:

  • 最初の条件: リクエストが指定されたサイトのURLから来ていないことを確認します。
  • 第二の条件: 空でないクエリ文字列のあるリクエストをブロックします。
  • 第三の条件: POSTリクエストを直接ブロックします。
  • 第四の条件: PATH_INFOがあるリクエストをブロックします。

これらの条件の組み合わせにより、あなたのサイトの環境を経由してナビゲートした正当なリクエストのみが指定されたサーブレットページに到達できるようになります。

結論

HTTP_REFERERに依存することで完全なセキュリティは得られませんが、機密ページへのアクセスを制限するための効果的な初期対策となります。この方法は、アプリケーションレベルの制約が包括的な変更を許可しない場合に特に便利です。

このアプローチはセキュリティの層を追加しますが、完全な解決策ではないことを覚えておいてください。アプリケーションとそのユーザーベースが成長するにつれて、サーバーサイドのバリデーションを強化し、追加のセキュリティ対策を探求することを常に考慮してください。

これらの方法を試したり、その他の考えをお持ちの方は、コメントを残してください。あなたの経験は、同様の課題に取り組んでいる他の人々を助けることができます!