2011-01-24 2 views
4

他のユーザーが信頼できるサイトに埋め込んだjavascript機能でセッションIDクッキーを盗むのは簡単です。この種の攻撃にはどのような対策がありますか?セッションIDを奪う - クッキーカウンター

ほとんどすべてのサイトでjsが使用されているため、クライアント側のすべてのjavascriptスクリプトを拒否するのはおそらく困難です。サーバー側で可能な対策は何ですか?有効なセッションIDが別のホストから使用されないように、セッションID値にクライアントのIPアドレスのハッシュを含めることは可能ですか?このアプローチは理にかなっていますか?

あなたの貴重な回答に記載されているリソースの1つでは、リクエストごとにセッションIDが変更される解決策が提案されています。そのような機能は既にアプリケーションサーバー/フレームワークでサポートされていますか?特にDjango/pythonについてはどうですか?

+0

悪意のあるサイトが信頼済みサイトゾーンに侵入した場合、ユーザーはサイトに関係なくかなりホーズ状態になります。信頼できるサイトは別のドメインからどのように正確にCookieを読み込みますか?それが本当に可能な場合、悪意のある信頼できるサイトがクライアント側からハイジャックされたセッションIDを利用できない場合は、IPフィルタリングが助けにならないでしょう –

+1

リクエストごとにセッションIDを再生成すると、戻るボタンを使用する能力。あなたが言及したウィキペディアの記事は、成功したログイン後の再生成を示唆しています。 –

答えて

1

それはセッション id値でクライアントのIPアドレスが有効な セッションIDは、別のホストから使用することを防ぐために のハッシュを含めることは可能ですか? このアプローチは意味がありますか?

これは、状況によってはハイジャックセッションをブロックできますが、攻撃者のコンピュータと被害者のコンピュータが同じネットワーク上にある場合、接続は同じIPアドレスから行われるため何もしません。

サーバー側ではどのような対策が考えられますか?

SSLを使用すると、人がパブリックネットワークに接続されている場合にセッションハイジャックを防止できます。

コードを確認して、コードにXSSの脆弱性がないことを確認できます。

セッションを保存するために使用されたCookieにHTTP Onlyフラグが付いていることを確認することもできます。

2

一部のホスト、ドメイン、サブドメインなどの一部のCookieを指定することをお勧めします。クッキーはそれをサポートしています。

他のドメインのCookieにアクセスすることはできません。

+0

私は、セッションとIPが一致しているかどうかを確認できるように、IPをセッションに格納することを意味しています。 – HoLyVieR

+1

あなたは正しいかもしれませんが、実際には、彼はその問題を解決するための提案としてIPに関することを言っていました。だからこそ私はこれに答え、私はIPのことをスキップしました。なぜなら、このアプローチとは関係がないからです(それは信頼できません)。 –

4

人々がプロキシを使用していないという保証はなく、これらのプロキシがIPを簡単に変更できるため、IPとセッションのマッピングを行うのは本当に面倒です。

SSLを使用してCookieを作成するのが最も良い方法は、HTTP-onlyです。

+0

SSLは、これであなたを保護しません。 – Alfred

+3

@ Alfred SSLは、パブリックネットワークに接続している場合にセッションハイジャックを防ぐのに役立ちます。 – HoLyVieR

+0

@HolyViERあなたはそれについて正しいと思います(私の悪い:P)。しかし、もう一度パブリックネットワークに接続して、SSLを使用しないウェブサイトにログインするべきではありません:P – Alfred

1
  • 信頼できるjavascriptのみをインストールしてください。コードが不明な場合は、ソースコード(XSSスキャナを使用することもあります)を調べてください。例えば、この単純なJavaScriptのスニペット使用
  • (入力から)あなたのjavascriptをフィルタリング:?!

    関数サニタイズ(HTML)を{
    `返す文字列(HTML)
    .replace(/ &(\ +ワット。 )/ g、 '&')
    .replace(/ .replace(/>/g、 '>')
    。( '"を'/"/ g)を交換してください。
    }

あなたはMUSTも良いフィルタリング(入力)サーバー側を持っ例えばPHPはfilter extensionを持って

+0

外部JavaScriptを組み込んだ場合、サニタイザも機能しますか? – paweloque

+0

外部のJavaScriptをどのように定義するかによって異なります。あなたがjsonからそれを得るか、ユーザからの入力やそれに似たものがあれば。しかし、HTML内のスクリプトタグ(

1

これはと呼ばれ、。最初の場所でクライアントにJavaScriptコードを植え付けるのを防ぐための最良のソリューションです。

興味深い解決策は、すべてのユーザー操作にトークンベースの認証を提供することです。詳細については、 OWASP CSRF pageをご覧ください。

編集:コメント:トークンはセッションハイジャックの問題を緩和するのに役立ちません。 Wikipediaの記事ではSession Hijackingについて述べているので、the best solutionは、ページがリロードされるたびに可能なセッションIDを回転させることです。

+0

トークンベースの認証は、セッションハイジャックとは何の関係もありません。それはそれを止めることはありません。 – HoLyVieR

+0

@HoLyVieRはい、ありがとう! – vz0

+0

セッションIDのローテーションが、フレームワーク/アプリケーションサーバーによって「そのまま」サポートされているかどうか知っていますか? – paweloque

関連する問題