着信要求がプロキシ サーバー経由で行われているかどうかを検出することは可能ですか? Web アプリケーションが IP アドレスを介してユーザーを「禁止」する場合、ユーザーはプロキシ サーバーを使用してこれをバイパスできます。これは、これらのリクエストをブロックする理由の 1 つにすぎません。これはどのように達成できますか?
4 に答える
これを達成するための 100% 信頼できる方法はありませんが、次のヘッダーのいずれかが存在することは、要求がプロキシ サーバーからルーティングされたことを強く示しています。
via:
forwarded:
x-forwarded-for:
client-ip:
クライアント ドメイン名でプロキシまたはpxyを検索することもできます。
プロキシ サーバーの検出を回避するためにプロキシ サーバーが適切にセットアップされている場合、それを知ることはできません。
他の人が言及しているように、ほとんどのプロキシサーバーはヘッダーを提供しますが、それらはユーザーを完全に隠すためのプロキシには存在しません。
このような状況を検出するには、Cookie、プロキシ ヘッダー検出、おそらく IP ヒューリスティックなど、いくつかの検出方法を採用する必要があります。この状況に関する情報については、http://www.osix.net/modules/article/?id=765を参照してください。プロキシ ブラックリストの使用も検討してください。これらは多くの組織によって公開されています。
ただし、100%確実なものはありません。上記の戦術を採用して最も単純な状況を回避することができますが、結局のところ、それは TCP/IP トランザクションを形成する一連のパケットにすぎず、TCP/IP プロトコルはセキュリティや認証などに関する今日の考え方で開発されたものではありません。 .
多くの企業がさまざまな理由で全社的なプロキシを展開していることに注意してください。一般的なルールとして単にプロキシをブロックすると、必然的に対象者が制限され、それが常に望ましいとは限りません。ただし、これらのプロキシは通常、適切なヘッダーで自分自身を通知します。自分自身を隠すのが得意なユーザーではなく、正当なユーザーをブロックしてしまう可能性があります。
-アダム
私のドメインが Google の AppSpot.com でホストされ、素敵なハードコア ポルノ広告が挿入された後、これについて少し掘り下げました (Google に感謝します)。
このhtaccessのアイデアから葉を取って、私は次のことをしていますが、うまくいっているようです。HTTP_X_APPENGINE_COUNTRY ServerVariable を挿入する AppSpot の特定のルールを追加しました。
Dim varys As New List(Of String)
varys.Add("VIA")
varys.Add("FORWARDED")
varys.Add("USERAGENT_VIA")
varys.Add("X_FORWARDED_FOR")
varys.Add("PROXY_CONNECTION")
varys.Add("XPROXY_CONNECTION")
varys.Add("HTTP_PC_REMOTE_ADDR")
varys.Add("HTTP_CLIENT_IP")
varys.Add("HTTP_X_APPENGINE_COUNTRY")
For Each vary As String In varys
If Not String.IsNullOrEmpty(HttpContext.Current.Request.Headers(vary)) Then HttpContext.Current.Response.Redirect("http://www.your-real-domain.com")
Next
リクエスト オブジェクトでこれらのヘッダーを探し、それに応じてリクエストがプロキシ経由かどうかを判断できます。
1) 経由 2) X-Forwarded-For
これは 100% 確実なトリックではないことに注意してください。これらのプロキシ サーバーがヘッダーの上に追加することを選択するかどうかによって異なります。