Pour la validation d'entrée sur un site Web, y a-t-il des problèmes de sécurité à divulguer à l'utilisateur exactement quels caractères sont valides ou non valides pour un champ donné?
CWE-200: Information Exposure dit qu'il faut essayer de ne pas divulguer des informations "qui pourraient être utiles dans une attaque mais qui ne sont normalement pas disponibles pour l'attaquant". Un exemple spécifique serait d'empêcher un système d'exposer des traces de pile (traité par CWE-209: Exposition d'informations via un message d'erreur).
Doit-on s'assurer que les messages d'erreur sont vagues, comme "Le texte que vous avez entré contient des caractères invalides"?
Est-ce une faille de sécurité d'inclure les expressions régulières utilisées pour valider l'entrée dans le code côté client, tel que JavaScript, qui seraient visibles par les attaquants? L'alternative, la validation des entrées côté serveur, réduirait quelque peu la convivialité car elle nécessiterait plus de communication backend (par exemple, cela pourrait entraîner une réponse du site et un affichage des erreurs plus lent).
Ou est-ce une forme de «sécurité par l'obscurité» car l'utilisateur / attaquant peut déduire quels caractères sont valides en soumettant à plusieurs reprises différents caractères pour voir s'ils produisent des erreurs?
Vaut-il la peine de toucher l'expérience utilisateur pour ralentir potentiellement une attaque?
Je dois noter, pour autant que je sache, la feuille de triche de validation d'entrée et le guide de développement de la validation des données ne fournissent pas d'orientation sur ce sujet.
Modifier le 17/01/2020:
Il y a eu plusieurs questions (y compris des réponses sur lesquelles je me suis efforcé d'écrire des commentaires depuis lors supprimé) quant à pourquoi on devrait faire une validation d'entrée.
Tout d'abord, merci à @Loek pour le commentaire pointant sur la Norme de vérification de la sécurité des applications de l'OWASP qui fournit des conseils sur les mots de passe aux pages 21 et 22: "Vérifiez qu'aucune règle de composition de mot de passe ne limite la type de caractères autorisé. Il ne devrait y avoir aucune exigence de majuscules ou de minuscules, de chiffres ou de caractères spéciaux. ".
Je pense que nous pouvons tous convenir que limiter les caractères dans un mot de passe est généralement une mauvaise idée (voir Réponse de @ Merchako). Comme @emory le souligne, cela ne peut probablement pas être une règle absolue (par exemple, j'ai vu de nombreuses applications mobiles qui utilisent un "NIP" secondaire plus facile à utiliser pour sécuriser l'application, même si quelqu'un d'autre y a accès pour me connecter à l'appareil.) Je n'avais pas vraiment de mots de passe en tête lorsque j'ai posé cette question, mais c'est dans une direction que les commentaires et les réponses sont allés. Pour les besoins de cette question, considérons que c'est pour les champs sans mot de passe.
La validation d'entrée fait partie de la "défense en profondeur" pour sites Web, services Web et applications pour empêcher les attaques par injection. Les attaques par injection, comme indiqué par l'OWASP, "peuvent entraîner la perte de données, la corruption ou la divulgation à des parties non autorisées, la perte de responsabilité ou le refus d'accès. L'injection peut parfois conduire à une prise de contrôle complète de l'hôte. L'impact sur l'entreprise dépend des besoins de application et données. "
Voir la vulnérabilité n ° 1 de OWASP, A1-Injection et CWE-20: Improper Input Validation pour plus d'informations. Notez qu'ils disent tous les deux que la validation d'entrée n'est pas une défense complète mais plutôt une couche de cette «défense en profondeur» pour les produits logiciels.