2011-08-10 6 views
1

現在、OWASPのトップ10のセキュリティ対策の大部分を実装しているJ2EEシステムがあります。アプリケーションは現時点で、ユーザがパスワードに保存されたユーザ/データベース。単一のURLリクエストに基づいてデバイス/ユーザを認証する

私は/*にマップされたJavaフィルターを使用して、ユーザーのログイン状態を判別するセッションおよびセッション属性の有無を確認します。

最後に問題があります:特定のイベントが発生したときにGPRS経由でURLリクエストを送信するデバイスを製造する会社と統合しています。このURLはGoogleシステムへのリンクです。

この 'デバイス'を認証するのと同じように(セキュリティを犠牲にすることなく)、デバイスに情報を送信することはできないため、単一のリクエストを認証する必要はありません。そのURLを '再生'

何らかの相互認証なしにこれが可能かどうかわかりません。チェックするIPアドレスのホワイトリストについて考えましたが、ネットワークは常にIPを変更し、デバイスはまだ「未確認」です。何かアドバイスをお願いしますか?

PS:私の一時的な解決策は、フィルタに例外を追加することでしたが、これは長期的ではなく、完全に安全ではありません。 (SSLもオプションではありません)

答えて

4

秘密鍵を使用してデバイスに要求(にはの一意の要求識別子を含む)を署名させることができます。次に、サーバーは、署名が有効であるかどうかをチェックし、署名が有効な場合にのみ要求を受け入れ/応答することができます。

要求IDを使用して、そのような要求が確実に再生されないようにすることができます。リクエストIDに単純なカウンタを使用すると、指定された識別子が既に使用されているかどうか(つまり、リクエストが再生されているかどうか)を確認することが非常に簡単であることを意味します。

+4

+1 - 何らかの電子署名が役立つかもしれません。秘密鍵がデバイスに埋め込まれている場合、その秘密鍵をリバースエンジニアリングすることが可能な場合があることに注意してください。これは、すべてのデバイスが同じキーを共有する場合に特に悪いことです。 – Qwerky

+0

ありがとう、私は本当に必要な場合、デバイスが受信することができますが、最悪の場合、それは最適ではないことを知っている私は知っている。私はあなたの答えを完全に理解していない、私はrequestID/counterを理解するが、署名する方法は理解していない。それは私がoAuthだった唯一のものが見つけられるGoogleのセッションに私を導いた。もっとヨアヒムを説明していただけますか? – epoch

+0

@epochデジタル署名は、デバイスに格納された秘密鍵を使用して作成されます(非抽出可能であることが望ましい)。セッションIDは常に増分することができ、署名されます。サーバーは、(デバイスの識別子と署名に基づいて)特定のデバイスの最後に使用されたセッションIDを保持します。 –

1

主な問題は、デバイスに含まれるすべての認証情報が、デバイスを取得するとサードパーティが利用できるようになることです。

主な質問は、(デバイス自体、所有者またはデバイスの場所など)、(b)デバイスがサポートできる機能、それが何であるか、そしてそれが操作上の面で何ができるのかを示します。

デバイスが秘密鍵を保持し、抽出を試みるのを妨げるように設計されたスマートカードまたは暗号トークンを埋め込むことができる場合、デジタル署名はうまく動作します。

デバイスが保護されたメモリを持つことはできますが、暗号操作を実行できない(スマートカードを埋め込むことはできません)場合、デバイスごとに固有の事前計算されたワンタイムパスワードのリストを考えることができます。サーバーはグローバルリストのコピーを持ち、リストが使用されるとリストからパスワードを削除します。

+0

こんにちはユージン、私はできるだけジェネリックにしたい、例えば、私は携帯電話が同じユースケース(保護されたページのゲストログイン)を使用することができると言う場合、それは涼しいだろうデバイスの機能を追加します。したがって、非常にデバイス固有のソリューションをプログラミングすることも私には最適ではありません – epoch

+1

@epoch携帯電話には保護されたストレージ(ほとんどの場合)と暗号化操作を実行する機能があり、問題はありません。それは問題となる可能性のある特定のデバイスです。だから私はあなたがいくつかのソリューション、機能の各クラスの1つで終わると思います。 –

関連する問題