2

SSLを使用せずにPHPセッションを保護することに興味があります。

驚いたことに、中間者がユーザーとサーバーの間で交換されたパケットを傍受した場合、セッションが認証されていたとしても、非常に簡単にセッションを盗むことができます。ログイン/ログアウト時にセッション ID を変更したり、ユーザーのシステム パラメータ (OS、ブラウザなど) を記録/確認したりするなど、被害を最小限に抑えるためのいくつかの戦術があることを私は知っています。

ただし、すでに認証されており、ログアウトされていないセッション中に (タイムアウトする時間もありませんでした)、攻撃者がセッション ID を取得できる場合、攻撃者はセッションを簡単に乗っ取ることができます (私が問題を理解している限り)。 )。

暗号化されたログイン認証中に、サーバーがランダムなセッションパスワードをクライアントに送信できる解決策を考えました。session-password は、そのログイン セッションの間のみ有効です。したがって、そのセッション中に交換されるすべてのメッセージは、セッション パスワードを使用して署名する必要がありました (例: MD5(セッション パスワード+メッセージ コンテンツ))。

問題は解決しましたか? 攻撃者が最初のログイン交換を暗号分析できないと仮定すると、このアプローチの弱点は何ですか?

4

2 に答える 2

3

提案された「署名」ソリューションには、クライアント側の動作が必要です。したがって、署名を実行できるクライアント側アプリケーションが必要です。

Flash/Java アプレット/Unity またはそれらのプラグインのいずれかを作成している場合は、クライアントをより厳密に制御し、署名を行うためのルーチンを追加できるため、計画に従うことができます。

しかし、プラグインを使用せずに HTML ページをブラウザーに配信していると思いますか? もしそうなら、本当に2つの選択肢があります。1 つ目は、ブラウザーに組み込まれている SSL (除外している) です。2 つ目は Javascript です。最大限のセキュリティを確保するには、暗号化 (公開) キー/アルゴリズムのクライアント側ストレージを含めて、SSL を何らかの形で模倣する必要があります (メッセージと一緒に移動しないようにするため)。公開鍵/秘密鍵と SSL のハンドシェークに可能な限り近づけたいと考えていますが、これは並大抵のことではありません。sarnold が示唆するように、強力な暗号化キーが必要です。例としてhttp://www.jcryption.org/をチェックしてください - 他の人はグーグルで表示されます。

それが少しやり過ぎである場合、おそらく最も実行可能なソリューションは、JS を使用してより単純な暗号化アルゴリズムをネゴシエートすることです。「キー」を送信し、ブラウザの Cookie に「キー」を保存し、すべての通信を AJAX 経由で行い、そのキーに基づくより単純な署名メカニズム (および、最初のハンドシェイク中にクライアントが共有した別の変数)。キーをデコードまたは一致しないものはすべて、セッション全体を強制終了して、最初からやり直します。


sarnold は、md5 と SHA-1 は避けるべきであるという彼の回答に良い点を挙げています。また、SHA256 は今日のコンピューターに適していないと考える人もいますが、JS でソリューションを実装する必要があることを考えると、スピードのために md5 のような「ピッドリー」(私の類推) に結び付けられる可能性があります。したがって、これに対する最善の防御策は、正確なログ記録とブルート フォース/エラー検出です。受信したメッセージが文字化けしている (どちらの側でも確認できる) 場合は、ログに記録して監視する必要があります。失敗が多すぎて IP アドレスが禁止され、ログを記録し続けます。

于 2012-06-06T02:34:10.330 に答える
2

より単純な MD5 の代わりにHMACのようなものを使用したいでしょう -- MD5 には弱点があることが知られており、SHA-1 も弱く感じ始めているため、SHA256 以上を使用したいと思うでしょう。

しかし、これらの変更を行っても、スキームはリプレイ攻撃に対して脆弱であり、攻撃者がリクエストを何度も再送信し、サーバーが毎回喜んで再実行する可能性があります. 最新のビーチ旅行の写真を投稿するだけなら大したことではありませんが、1000 ドルのポニーの購入リクエストを送信する場合、誰かが予想よりも多くのポニーを手に入れることになります。

したがって、プロトコルにnonceを追加する必要があります。

他にも問題が発生する可能性があります。結局のところ、TLS は、SSL を 3 回繰り返した後、現在バージョン 1.2 になっています。TLS に固執するだけで満足です。

于 2012-06-06T02:16:26.570 に答える