2016-05-27 18 views
0

クロスサイトフォレージを防止する方法について少し混乱します。まだ。私はそこに豊富な情報があることを知っていますが、私は混乱しています。AJAXサービスでのクロスサイト偽造

Steven Anderson's postでは、彼は次のようにフォームを説明します

<body onload="document.getElementById('fm1').submit()"> 
    <form id="fm1" action="http://yoursite/UserProfile/SubmitUpdate" method="post"> 
     <input name="email" value="[email protected]" /> 
     <input name="hobby" value="Defacing websites" /> 
    </form> 
</body> 

他の誰かのサイトで。

解決策は、サーバによって生成された "偽造防止"トークンで、隠された形式のリクエストでPOSTされます。それはクールですが、ハッカーがフォームページをダウンロードし、トークンを抽出してそれをポストするのを止めるのは何ですか?

私のウェブサイトへのサインアップでは、現在入力されているユーザー名をサーバーに送信するAJAX機能が必要です(使用可能かどうかに応じて「真/偽」と回答する必要があります)。これはonKeyが発生するため、ユーザーはまだ使用されていないユーザー名を選択できます。 「新規ユーザー」の条件がすべて満たされると、「送信」ボタンが有効になります。

明らかに、これはハッカーがサービスを利用して利用可能かどうかを「テスト」するための機会です。インターネットバンキングレベルのリスクではないことはわかっていますが、ハッカーではなく、私のアプリケーションからのリクエストだけです。

これらのクエリはどのように考えられますか?

UPDATE:私のシナリオでは、だから、

。トークン(クライアントのIPアドレスのハッシュされた値)を生成し、ユーザー名が利用可能かどうかについての情報があれば、サービスはこれを受け取ることを期待しています。

- ドメイン外のユーザーが単にサービスを呼び出しているなどの問題が残ります。 /generateTokenこれはクライアントのIPを見ています...知っているハッカーかもしれません。その後、/ isUsernameAvailableに提出され

戻り

{ token: 4uru32br } 

?トークン= 4uru32br & partialUsername = usernam

それは私を得るのでしょうか?

+0

"ハッカーがフォームページをダウンロードするだけで、トークンを抽出してポストするのは何ですか?ハッカーは、被害者の代わりに自分のトークンを落とします。 – PeeHaa

+1

CSRFトークンは、リクエスト偽装とはまったく異なる問題であるため、ログイン試行を抑制していません。 – PeeHaa

答えて

-1

偽造防止トークンはランダムコードではありません。いくつかの要求に対して再利用されたトークンもありません。

サーバは、サーバーキーを使用してip + saltを暗号化するなどして、トークンを発信者のip-addressまたはセッションと結合します。攻撃者があなたのサイトからトークンをダウンロードしようとした場合

したがって、それはトークンを抽出し、ちょうどフォームページをダウンロードするハッカーを停止することが何であるかを

+0

"偽造トークンはランダムコードではありません"。何故なの? – PeeHaa

+0

サーバがすべてのトークンをクライアントのIPと一緒に保存しなければならないとすれば、それは私が推測するとたくさん保存されるはずです。特にバッキングと再転記を許可する必要がある場合。暗号化された状態をクライアントに送信するのが安価です。 –

+0

これは誤った仮定に基づいています。 – PeeHaa

0

本当のクライアントで使用できなくなりますし、投稿しますか?

same-origin policyです。

現在入力されているユーザー名をサーバーに送信するAJAX機能を使用したい場合は、「True/False」と応答する必要があります。

これは、ユーザーの列挙の脆弱性です。

これらのクエリはどのように考えられますか?

ここにあなたの新しいプロセスです:

  1. は、ユーザ名のメールアドレスを使用してください。

  2. 登録フォームの自動化を防ぐためにCAPTCHAを使用してください。

メールのユーザー名は存在しません:

ショー "成功" のメッセージを。 1回限りのリンクでメールアドレスを送信します。そのリンクを使用してサイトに戻ると、ユーザーを登録します。

メールのユーザー名は存在しない:

ショー "成功" のメッセージを。そのアドレスに「誰かがこのアドレスのアカウントを作成しようとしていますが、すでに存在しています」というメッセージとともにメールを送信します。

0

CSRFuser enumerationが混在しています。

与えられた解決策は、バック隠しフォーム内の任意の要求とにPOST-EDであるサーバによって生成された「偽造防止」トークン、 です。それは クールですが、ちょうどフォームページをダウンロードするハッカーを停止するには、 トークンを抽出し、それをPOSTする?

あなたのサイトの通常のユーザーです。

チャックは悪賢い攻撃者です。

ボブはあなたのサイトに行き、(あなたのコード例で)コメントフォームを提出します。 CSRF保護がある場合は、トークンがあまりにもこのフォームに含まれます。

<input type="hidden" name="csrf_token" value="zxcvbnnmm1235152" /> 

ボブのセッションは彼のサーバー側のために保存zxcvbnnmm1235152トークンを持っています。

チャックには登録済みのため、あなたのサイトへのログインもあります。彼は、このページに行くときしかし、彼は代わりにこのトークンを取得します

<input type="hidden" name="csrf_token" value="lklkljlk898977" /> 

チャックがページをダウンロードする場合は、ボブがチャックのサーバーでこのページにアクセスするには何らかの形で(例えば、彼に電子メールを送信)を取得し、理由csrf_tokenがBobと一致しない場合、ChuckはBobとしてメッセージを送信できません。

ボブは、フォーム内のトークンがセッションに関連付けられているトークンと一致するため、正常に続行できます。

CSRFは、ボブのブラウジングセッションを使用して、チャックが物事をボブとして送信するのを止めることについてです。

このための私のアプリケーションは次のとおりです。私のウェブサイトに私が好きなのためにサインアップオン それが「真/偽」応答すべき サーバーに現在入力されたユーザ名を送信AJAX機能利用可能か否か。 これはonKeyが発生するので、ユーザーは が既に使用されていないユーザー名を選択できます。 「新規ユーザー」の条件がすべて満たされた場合、「送信」ボタンが有効になります。

明らかに、これは、彼らが利用可能かどうかを確認するためにユーザ名の 「テスト」たくさんのサービスを利用するハッカーのための機会です - 私はそれがリスクの 正確にインターネットバンキングレベルのソートではないですけど、私はまだたいと思います私のアプリケーションからのサービスのみのリクエストで、ハッカーではありません。

はい、これはユーザーの列挙の脆弱性です。

このメールを安全にする方法については、ユーザー名をメールでお知らせし、this answerに従ってください。

関連する問題