2

私はjQueryを使用して、ユーザー登録中にインラインフォーム検証を行い、投稿後のフォームエラーを防ぐために、次のことを確認しています。

  • ユーザー名が利用可能です
  • メールはまだ登録されていません

欲求不満を防ぐために、フォームを送信する前にユーザーにフィードバックを提供するという考え方です。コードは下部にあります。

質問:

  • これは潜在的なセキュリティ問題ですか?私のJavaScriptを見ている誰かが、私がポーリングしているユーザー名/電子メールの確認用のURLを見つけて、それを自分で使用できると思っていました(なぜ彼らがこれを行うのかはわかりませんが、誰も知りません)。
  • そうである場合、どのような保護を実装できますか?クロスサイトスクリプティング保護について少し読んだことがありますが、このようなAJAXリクエストでどのように実装できるか、または必要かどうかさえわかりません。

ご入力いただきありがとうございます。

現在のコード:

次のビューを定義しました(スニペットから取得しましたが、どこを思い出せません):

def is_field_available(request):
    if request.method == "GET":
        get = request.GET.copy()
        if get.has_key('username'):
            name = get['username']
            if User.objects.filter(username__iexact=name) or \
                UserProfile.objects.filter(display_name__iexact=name):
                return HttpResponse(False)
            else:
                return HttpResponse(True)
        if get.has_key('email'):
            email = get['email']
            if User.objects.filter(email__iexact=email):
                return HttpResponse(False)
            else:
                return HttpResponse(True)

    return HttpResponseServerError("Requires username or email to test")

jQueryコードのサンプルを次に示します。

$.get('is-user-name-available/', { email: $(this).val() },
    function(data, status){
        if(data == "True"){
            $input.fieldValid();
        } else {
            $input.fieldInvalid("This email address has already been registered.  Try another or recover your password.");
        }
});

編集:コードを更新し、質問を言い換えました。[ 2009年10月7日]

4

2 に答える 2

2

http://www.djangosnippets.org/snippets/771/を参照してください-表示をajaxリクエストに制限できます。クロスドメインajaxを実行する唯一の方法は、ビューでサポートされていないjsonpです。

于 2009-10-08T18:45:57.140 に答える
1

はい、これは潜在的なセキュリティの問題ですが、それほど大きな問題ではありません。コードが安全であることを確認し、非表示にする必要のある情報を明らかにしないものを常に返すようにしてください。

誰かがブラウザに入力しても問題はありません:example.com/account/verify_username/?username=admin(ただし、ここでのみPOSTを使用することをお勧めします)

したがって、何をすべきか:1)必要なすべてのパラメーターがあり、それらが正しい形式であることを確認します2)おそらく要求がどこから来たかを確認します3)コードで発生する可能性のあるすべての例外を処理することを確認します4)ドンユニットテストを忘れないでください-そのためには、ロジックをビューではなく、何らかの方法で配置してみてください:)

于 2009-10-08T18:54:30.477 に答える