2009-06-30 6 views
1

Je suis la conception d'un formulaire d'inscription simple dans ASP.net MVC 1.0 Je veux autoriser le nom d'utilisateur à valider pendant que l'utilisateur tape (selon les questions connexes liées à ci-dessous)Ajax sécurité Question: Fournir des noms d'utilisateur disponibles dynamiquement

Tout cela est assez facile. Mais quelles sont les implications de sécurité d'une telle fonctionnalité?

Comment puis-je éviter les abus de la part de personnes en les raclant pour déterminer la liste des noms d'utilisateurs valides?

quelques questions connexes: 1, 2

+0

Est-il juste de dire qu'exposer ces informations sans tenir compte des méthodes de sécurité que quelqu'un a décidé d'utiliser les noms d'utilisateurs en abusant de cette méthode finira par les obtenir? –

Répondre

3

Pour empêcher les activités "malveillantes" sur certains de mes ajax internes, j'ajoute deux variables GET on est la date (généralement à l'époque) puis je prends cette date ajouter un sel et SHA1, et aussi poster que, si la date (quand rehashed) ne correspond pas au hachage, alors je laisse tomber la demande autrement le remplir.

Bien sûr, je fais le cryptage avant que la page ne soit rendue et je passe la date de hachage & au JS. Sinon, cela n'aurait aucun sens. Le problème avec l'utilisation des limites basées sur IP/cookie est que les deux peuvent être contournés. En utilisant une méthode symbolique avec un bon sel cryptographiquement fort (disons quelque chose comme l'un des «mots de passe parfaits» de https://www.grc.com/passwords.htm de Steve Gibson), il faudrait un temps ÉNORME (sur l'échelle des décennies) avant que la méthode puisse être prédite là pour assurer une certaine sécurité.

+0

C'était aussi ma première pensée. un jeton de sécurité –

+0

D'après mon expérience, c'est le moyen le plus efficace, et cela ne dérange pas les utilisateurs. – UnkwnTech

+0

cela ne fonctionne tout simplement pas! Le hacker peut rejouer le jeton de sécurité à moins que vous n'utilisiez une solution de base de données –

0

vous pouvez limiter le nombre de demandes de peut-être 2 par 10 secondes environ (un utilisateur réel peut mettre un nom qui est pris et le modifier un peu et essayer encore). un peu comme comment SO ne vous laisse pas commenter plus d'une fois toutes les 30 secondes. Si vous êtes vraiment inquiet à ce sujet, vous pouvez prendre une méthode ci-dessus et compter combien de fois ils ont essayé dans un certain laps de temps, et si elle dépasse un seuil, donnez-leur un coup de pied à une autre page.

+0

Je pensais à un 'jeton de sécurité' qui doit être dans la demande le jeton est bon pour xx nombre de requêtes –

+0

Peut-être limiter le nombre de requêtes par adresse IP est une meilleure façon d'aller –

+0

vous pourriez passer par tout le gâchis de jetons et de hachage et autres, mais je crois personnellement limiter les demandes par IP est plus facile et tout aussi efficace, surtout si vous n'avez pas besoin de sécurité au niveau de l'entreprise – Jason

0

Validé comme: "Ce nom d'utilisateur est déjà utilisé"? Si vous limitez le nombre de requêtes par seconde cela devrait aider

+0

oui comme dans "est-ce que ce nom d'utilisateur est disponible?" –

0

Une solution courante consiste à ajouter un délai dans la requête. Si la demande est envoyée au serveur, attendez 1 (ou plus) secondes pour répondre, puis répondez avec le résultat (si le nom est valide ou non).

L'ajout d'une barrière de temps n'affecte pas vraiment les utilisateurs qui n'essaient pas de gratter, et vous avez obtenu une limite de 60 demandes par minute gratuitement.

+0

au prix d'un fil de couchage –

0

Bulding sur la réponse fournie par UnkwnTech, qui est un conseil assez solide.

Vous pouvez aller plus loin et que le client effectue une partie de calcul pour créer le hachage de retour - cela pourrait juste être une arithmatic simple comme subtrating quelques chiffres, en ajoutant les données et en multipliant par 2.

Le arithmatique ajouté signifie qu'un script de grattage de nom d'utilisateur prêt à l'emploi a peu de chance de fonctionner et oblige le client à utiliser davantage de CPU.

Questions connexes