Domanda

Sto usando jQuery per fare un po 'la validazione dei form in linea durante la registrazione dell'utente per prevenire errori di forma dopo la pubblicazione controllando per vedere se:

  • nome utente è disponibile
  • e-mail non è già stato registrato

L'idea è di dare il feedback degli utenti prima che il modulo viene inviato per evitare la frustrazione. Il codice è in fondo.

Domande:

  • Si tratta di un potenziale problema di sicurezza? Ho avuto il pensiero che qualcuno guardando il mio JavaScript si potrebbero trovare l'URL Sono polling per conferma il nome utente / e-mail e poi lo uso se stessi (non so perché dovrebbero farlo, ma non si sa mai).
  • Se lo è, ciò che le protezioni posso implementare? Avevo letto un po 'di protezione cross-site scripting, ma non sono sicuro di come potrebbe essere implementato in una richiesta AJAX, come questo, o se è addirittura necessario.

Grazie per il vostro input.

Codice attuale:

Ho definito il seguente vista (che ho preso da qualche frammento di, ma non ricordo dove):

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")

Ecco un esempio del codice 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.");
        }
});

Edit: aggiornato il codice e riformulato le mie domande. [ 10/07/09 ]

È stato utile?

Soluzione

http://www.djangosnippets.org/snippets/771/ - è possibile limitare l'immagine per richieste Ajax. L'unico modo per fare cross-domain Ajax è jsonp cui si non supportano nel vostro punto di vista.

Altri suggerimenti

Sì, questo è un potenziale problema di sicurezza, ma non troppo grande: basta assicurarsi che il codice è sicuro, e restituisce sempre qualcosa che non rivela informazioni che dovrebbero essere nascosto

.

Non c'è niente di male se qualcuno si ingresso in del browser: example.com/account/verify_username/?username=admin (Anche se io suggerirei di usare POST solo qui)

Quindi, cosa dovrebbe essere fatto: 1) Verificare che ci siamo tutti i parametri di cui hai bisogno e sono in un formato corretto 2) Forse verificare dove richiesta proveniva da 3) Assicurarsi di gestire tutte le eccezioni che possono accadere nel codice 4) Non dimenticare di test di unità - per questo cercano di inserire il vostro logica non in vista, ma in qualche modo:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top