2011-11-18 9 views
5

私はサイトで見た多くの投稿から、AJAXや従来のフォームによって実行されるログインは、互いに安全です。 (再:Login/session cookies, Ajax and securityAjax login and javascript cookies, is this secure?AJAXログイン呼び出しでJavascriptハッシュ、より多くのセキュリティ?

私の質問(複数可)/ありさ:

  1. 私はそれをサーバーに送信する前に私が(クライアント側の/ JavaScriptのハッシュ ライブラリ経由で)ユーザーのパスワードをハッシュした場合、私はeasedropping人々からのセキュリティを高めるのですか?

  2. フォームトークン(ランダムベース、別の時間ベース)を置くと、それはCSRF攻撃をカバーしますか?

  3. 私はこのすべての後にすべての私の拠点をカバーしていますか?このフォームは安全ですか?
+1

パスワードを送信する必要がある場合(可能であれば、ログインセッションCookie以外のものについても)SSLを使用してください。 – Thilo

答えて

5

実際これは大きなセキュリティ上の問題になる可能性があります。パスワードがハッシュ化される理由は、失敗時に計画する手段です。攻撃者はデータストア(SQLインジェクション)にアクセスし、ハッシュを取得する可能性があります。ハッシュでログインしているだけの場合、攻撃者はアプリケーションにアクセスするために回復したハッシュを解読する必要はありません。

リプレイ攻撃も問題です。認証中にハッシュを盗聴すると、そのリクエストを認証して再生するだけで止まってしまいますか?

認証にメッセージダイジェスト機能を使用するプロトコルは、ワンタイムソルトとして使用されるノンスをクライアントに提供します。 MicrosoftのSMB NTLM認証が良い例ですが、a lot of problemsがありました。

USE SSLログイン専用ではありません。 OWASP A9は、セッションIDが安全でないチャネルで漏らされてはならないと述べています。あなたが本当の認証資格情報をちょうど数ミリ秒後にこぼした場合、誰もがパスワードを気にします。

ほとんどの人は、ログインにCSRF保護を実装していません。結局のところ、攻撃者は最初にパスワードを知る必要があるので、「セッションライディング」は議論の対象です。

+0

あなたが提出する前にパスワードの公開鍵暗号化を使用し、次に一致する秘密鍵を使用してサーバー上のパスワードを復号化する場合は、好奇心がかからない方がいいでしょうか? – Esailija

+0

@Esailija非対称暗号には、リプレイ攻撃やIVの欠如などの独自の問題があります。しかし、もっと重要なのは、セッションIDを保護していない場合、何も保護していないことです。電線を盗んだ攻撃者は完全なアクセス権を持ちます。 – rook

+0

ああ、より多くの考えで答えを読んでいるはずです。私は3番目のパラグラフの最後の部分を完全に逃しました...答えに感謝します。 – Esailija

0

攻撃者があなたが使用しているハッシュを知っている場合、攻撃者はそれを裂くことができます。また、塩を追加したい場合は、それをブラウザに送る必要があり、攻撃者はそれを傍受する可能性があります。時間を塩として使用することは、比較的短い時間しかないので、彼らも同様にそれを解決することができるので、機能しません。

+0

"ハッシング"(暗号化とは対照的に)は一般的に可逆的ではありません。 –

+0

@DavidGelharありがとう、私は言葉を私の部分の言葉の貧しい選択だった変更しました。 – qw3n

+1

@David Gelhar彼は些細な攻撃を意味する。リッパー、ジョン、またはrainbowcrackはトリックを行う必要があります。 – rook

1

ごくわずかですが質問3に答えました。いいえ!また、AJAXと標準形式は、と同様に安全でないこともあることを覚えておいてください。

安全な認証の実装は難しいです。あなたが学問的な演習としてそれをやっていない限り、私はあなたのフレームワークが提供するライブラリを使うことを強くお勧めします。

また、次のようなものなども考慮する必要があります。

  • セッションCookieで使用するために、適切でランダムで推測できないセッションIDを実装します。
  • セッションIDを強制的に許可しないでください。
  • 許可または資格情報が変更された場合(たとえば、ユーザーが現在ログインまたはログアウトしているため)、 は直ちにセッションを無効にして新しいセッションを開始します。
  • ログアウト機能を提供し、ログアウト時にセッションを無効にしてください。
  • CookieをHttpOnlyに設定します。 - HTTPSが必要であり、Cookieを安全に設定するだけです。
  • セッションの妥当性を制限して、ユーザーの検索に役立つその他の情報を確認することを検討してください。ユーザーエージェント。
  • 未使用後は常にセッションを期限切れにし、ユーザーを古いhttpセッションに再接続することで、「ログインしてください」を実装しないでください。
  • 2セッションで同じセッションIDを同時に使用できないようにする
  • セッションが無効になったときにすべてのセッションデータが破棄されていることを確認してください。新しいユーザーが来て、以前に使用されていたセッションIDが割り当てられることがあります。この新しいセッションは、そのセッションIDに対して以前に設定されたセッションデータにアクセスすることはできません。
+0

これは素晴らしいことです! PHPのsession_start()関数に組み込まれている「2つのセッションが同時に同じセッションIDを持つことはできませんか?」 –

+1

@JosephSzymborskiはい。あなたはこの興味深いre php http://phpsec.org/projects/guide/4.htmlを見つけることができます – Cheekysoft

関連する問題