2 votes

Formulaire Blazor - Assainissement des entrées utilisateur (<InputText>, <InputTextArea> etc)

Je travaille sur une application Blazor où j'ai un formulaire qui prend les données de l'utilisateur (formulaire avec quelques zones de texte et zone de texte). Quelle est la meilleure approche pour l'empêcher d'être victime de cross site scripting et de XSS attaques.

J'utilise Microsoft.AspNetCore.WebUtilities pour d'autres composants permettant de coder et de décoder le html. L'encodage et le décodage de l'entrée de l'utilisateur suffiront-ils à prévenir les attaques, les vulnérabilités, etc.

Dois-je utiliser une bibliothèque telle que Gans.XSS.HtmlSanitizer ou existe-t-il une fonction intégrée dans Blazor ?

Merci d'avance.

2voto

Nik P Points 1776

Puisque les entrées doivent être liées à un modèle à l'intérieur d'un fichier <EditForm> et que ce modèle est une classe, pouvez-vous utiliser le composant intégré <DataAnnotationsValidator /> Pour réaliser cette opération à l'aide d'une expression régulière, vous pouvez créer votre classe Model avec une annotation de données Regex sur les propriétés associées :

using System.ComponentModel.DataAnnotations;

public class ModelToBindTo()
{
    [RegularExpression(@"[A-Za-z0-9 _.-]*")] //Check/tweak this before use, going from memory 
    public string PropertyToBindInputText { get; set;}
}

En se liant à cette dernière et en utilisant le validateur this devrait restreindre tous les caractères d'entrée qui pourraient vous causer des problèmes, et vous pouvez les comparer à une regex côté serveur si nécessaire pour effectuer une double vérification avant de persister les données ou de faire quoi que ce soit d'autre avec elles.

Plus de détails sur le validateur peuvent être trouvés ici
La référence des annotations de données peut être trouvée ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X