3

これは、私が入手した情報では答えが明らかでない可能性があるという点で、やや推測的な質問ですが、十分な経験を持つ誰かが、企業の代理人の一般的な慣行に基づいて、ありそうな答えを認識してくれることを願っています.

私は (ソフトウェア開発者としてではなく) 企業プロキシの背後で働いています。余暇には、開発中の Java プログラムをいじっていました。このプログラムは、いくつかの非常に単純な HTTP GET 要求を作成する必要があり、そのために Apache HttpClient を使用しています。最初はプロキシサーバーを経由できるか心配でした。私たちの Web ブラウザーでは、プロキシ サーバーはネットワーク設定に簡単に入力できます。認証は必要ありません。そこで、Java プログラムに以下を追加しました。

myClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, MY_PROXY);

案の定、うまくいきました!しかし、私には別の懸念がありました。私のプログラムからの HTTP リクエストにはおそらく奇妙な User-Agent が指定されており (これが事実であることを確認しました)、自動または手動のパケット インスペクションで何らかの疑いを引き起こしたくありませんでした。そこで、「User-Agent ヘッダーをこのマシンのブラウザーと同じに設定してみませんか?」と自分に言い聞かせました。

myClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, BROWSER_AGENT);

ここが奇妙になるところです。上記の文字列が、私のマシンの会社提供のブラウザー (IE または FF) とまったくBROWSER_AGENT同じ値に設定されている場合、会社のプロキシ サーバーから「認証に失敗しました、資格情報がありません」というタイプのエラー メッセージが返されます。しかし、User-Agent ヘッダーを一般的なもの、たとえば完全に偽の文字列、さらにはの文字列に設定すると、すべて正常に動作します! 私を混乱させる部分は次のとおりです。Mozilla 5.0

  • User-Agent がブラウザと同じ (長い複雑な文字列) に設定されている場合、何らかの形で「認証に失敗」します。これは、実際のブラウザでは認証情報を提供しないため意味がありません (事前にインストールされた証明書からのものでない限り)。多分?)
  • 企業がポート 80 でプロキシ サーバーに送信されるすべての要求に対して認証を要求する場合、ランダムな User-Agent 文字列を通過させるのはなぜでしょうか? 監視?私が理解できない他の理由はありますか?

うまくいけば、この質問は建設的と見なされるほど投機的ではありません。この分野で経験のある方のお話をお聞きしたいです。ありがとう。

4

1 に答える 1

3

デフォルトでは、HTTPClient は自分自身をユーザー エージェントとして識別します。これまで見てきたように、これを任意の文字列にオーバーライドできます。

プロキシ サーバーはブラウザの種類に基づいてユーザー資格情報を自動的に追加するように設定されているようですが、何らかの例外が見つかったため、管理者が例外ルールを追加しました。個人的には、偽のユーザーエージェントを使用するだけで、すべてのプログラムが認証なしでプロキシを通過できることがわかったので、これは非常に悪いセキュリティポリシーだと思います。

于 2012-12-03T06:04:14.533 に答える