Question

J'ai quelques formulaires HTML, et j'implémente le filtrage de ces champs sur le côté du serveur (en utilisant des servlets Java), et je me demandais ce que je devais autoriser, ou peut-être ce que je devrais interdire. Pour les adresses e-mail, je supprime tout ce qui correspond à ceci:

[^A-Za-z0-9._%-@]

Quelles sont les règles similaires que je pourrais appliquer aux champs de nom, de message et de numéro de téléphone.

Je suppose que <et> devrait être échappé comme <et>, que dois-je remplacer d'autre?

Dans ce sens, y a-t-il des recommandations pour la longueur maximale autorisée pour de tels champs?

Était-ce utile?

La solution

Vous devez vous échapper & à &amp; d'abord, puis < à &lt;. Contrairement à la croyance populaire, c'est pas nécessaire pour échapper à > à &gt;. Il n'est pas nécessaire de protéger le support qui se ferme une balise HTML s'il n'y a aucun moyen de ouvert une.

Votre appel sur la question de savoir s'il doit être échappé avant d'être écrit dans la base de données, ou si vous devez le faire car il est lu à chaque fois de la base de données. Le faire du côté d'entrée va être plus rapide; Le faire du côté de la sortie sera plus sécurisé et facilitera également les données d'échange avec d'autres applications si vous n'avez pas à toujours déchaîner Des trucs avant de l'envoyer à une autre application. Personnellement, je paierais le prix du rendement et la désescuie du côté de la production. La mise en cache peut aider.

Le reste de la validation que vous voudrez faire dépend du type de données. Pour une adresse e-mail, vérifiez pour vous assurer qu'il a un @ Et au moins un . Après cela, alors, si vous vous souciez s'il est valide ou non, envoyez à l'adresse un e-mail de test. Il est presque impossible de valider complètement une adresse e-mail beaucoup plus loin que cela, et même si l'adresse est valide syntaxiquement, cela ne signifie toujours pas qu'il peut être livré. De même, permettez presque n'importe quoi comme URL et ensuite Essayez de le récupérer pour voir si c'est valable. Pour une adresse de facturation / expédition, utilisez le service Web USPS pour valider et obtenir les données dans le meilleur format (pour nous adresses).

Autres conseils

Vous devez autoriser n'importe quoi pour les noms. Considérez "O'Malley" ou "Hudson-Walker". Certaines langues (comme Salish) incluent des nombres afin que vous puissiez avoir "SQWXWU7MISH". Ensuite, il y a des personnages accentués, l'hébreu, le cyrillique, le grec, le chinois, le coréen et même le musicien anciennement connu sous le nom de Prince.

Le texte du message doit être également sans contrainte. Si les messages peuvent contenir du HTML, vous devrez analyser le HTML (avec un véritable analyseur HTML) et appliquer la balise et attribuer leslists pour permettre uniquement à ce que vous attendez.

Les numéros de téléphone doivent également être assez proches du formulaire gratuit. Les formats nord-américains sont différents de ceux européens, certaines personnes aiment dire "(555) 555-5555" tandis que d'autres aiment "555-555-5555", certains numéros de téléphone ont des extensions et d'autres non.

Le seul codage dont vous devez vous soucier de l'entrée est que tout se trouve dans UTF-8 (y compris votre base de données). Et, lorsque vous parlez à votre base de données, n'essayez pas de coder vous-même vous-même, utilisez le mécanisme de citation du pilote de base de données et les espaces réservés.

Les longueurs devraient généralement être beaucoup plus grandes que vous ne le pensez qu'ils devraient doubler (au moins) votre première supposition à un maximum raisonnable. La différence de stockage entre 20 caractères pour un nom et 100 ne sera pas importante pour la plupart des applications, alors soyez généreux.

Vous ne devez pas vous soucier du codage HTML jusqu'à la sortie, puis vous devez utiliser les outils d'encodage HTML et URL que votre environnement prend en charge, n'essayez pas de construire le vôtre.

Ne contraignez pas trop vos contributions, soyez aussi lâche et indulgent que possible. Soyez très strict avec vos sorties.

Longueur maximale: j'applique toujours une longueur maximale sur mes champs du côté client et du côté serveur. Les valeurs correspondent aux valeurs max définies dans la base de données.

Je suis d'accord pour échapper à <,> et>, <.

Je pense que c'est une bonne habitude d'avoir une très bonne validation. Si je travaillais avec les champs de nom, de message et de numéro de téléphone, je ferais ce qui suit.

Pour chaque zone de texte, faites en sorte que la zone de texte ne prenne pas du tout les valeurs non valides.
Nom: AA -ZZ
Message: 'AA -ZZ' '0-9' '.' ',' ';' etc..
Numéro de téléphone: '0-9' Ne permettez aucun espace mais autorise '-', vous pouvez toujours analyser le côté serveur de chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top