web-dev-qa-db-fra.com

Désinfection de la saisie des noms

Je travaille à l'intégration de mon application Web et je me demande comment nettoyer les entrées utilisateur pour les champs de données tels que le nom ou le nom de l'entreprise. Au départ, j'ai limité la saisie aux seules lettres et chiffres, mais j'ai réalisé que cela ne fonctionnait pas pour O'Malley avec la citation, évoù avec des accents, et KLA-Tencore avec le tiret. Quelle est la bonne limitation des entrées pour les données utilisateur nettoyées?

Merci.

1
frenchie

Soyez prudent en utilisant des méthodes qui empêcheraient certains de vos utilisateurs d'entrer leurs noms réels. Les noms sont extrêmement personnels et dire "vous ne pouvez pas utiliser votre vrai nom" ne conviendra pas à tout le monde. Je me souviens avoir traité avec un client au moins une fois par mois qui était contrarié de ne pas pouvoir utiliser son nom avec trait d'union (c'était un système rarement utilisé où votre mot de passe était obligatoire pour être votre nom de famille - pas le mien, ne demandez pas) . Elle ne comprenait pas pourquoi elle ne pouvait pas l'utiliser et n'aimait pas l'explication. Il y a eu une réaction assez importante à ce sujet, comme Facebook a craché avec des utilisateurs irlandais à qui il a été dit `` d'utiliser un vrai nom '' .

PixelSnader a raison que la réponse dépendra de ce que vous demanderez à votre utilisateur de remplir. Votre technologie est l'autre côté de cette équation. Par exemple, PHP n'aime apparemment pas les noms de fichiers avec des "caractères étranges" .

À mon avis, vous devriez faire tout votre possible pour accueillir des caractères spéciaux dans les endroits où vous le pouvez. Si vous devez nettoyer les caractères spéciaux, vous devez vous efforcer de le rendre transparent pour l'utilisateur.

En ce qui concerne les méthodologies, étant donné l'allocation de Facebook, je serais curieux de voir comment elles le font, mais une option potentielle pour certains champs peut être d'encoder l'entrée et de la décoder en cas de besoin. OWASP a quelques suggestions sur les stratégies de validation des données y compris un encodage Base64.

3
Sgiobair

La désinfection des entrées utilisateur ne signifie pas que vous modifiez ou restreignez les entrées, cela signifie simplement que vous les manipulez en toute sécurité et que vous y échappez si nécessaire pour empêcher les exploits comme les attaques XSS. Si vous enregistrez les données dans une base de données, utilisez des requêtes paramétrées. Même si votre base de données spécifique ne les prend pas directement en charge, il arrive souvent que de nombreuses bibliothèques puissent ajouter un simple wrapper pour vous permettre de faire essentiellement la même chose. Si vous effectuez une sortie vers une page HTML, échappez-la pour HTML, etc.

tl; dr Ne modifiez jamais les données d'un utilisateur; utilisez-le simplement en toute sécurité.

1
michael

comment nettoyer les entrées utilisateur pour les champs de données tels que le nom

Soit

  • Non. Si vous vous inquiétez de l'injection SQL, utilisez plutôt des requêtes paramétrées.

  • Utilisez les classes de caractères Unicode appropriées. Par exemple, voir Java regex pour la prise en charge Unicode? : \p{L}+.

0
RedGrittyBrick