J'ai un contrôleur qui accepte j'ai une action de post WebAPI p> et une action d'obtenir. p> Étant donné que le contenu est écrit par JavaScript plutôt que directement dans une vue, le contenu exact était écrit, aucun avertissement ASP.NET sur le contenu dangereux a été lancé. P> Je veux protéger contre les XSS. Pour le moment, je fais p> dans l'action d'obtention. (Pris un certain code de Utilisation d'expressions régulières C # pour supprimer les balises HTML < / a>) p> existe-t-il une protection intégrée à ASP.NET que je devrais utiliser? Y a-t-il des attributs que je peux décorer mon modèle? P> J'ai remarqué ce http://stephenwalther.com/archive/2012/06/25/Announcing-Le-june-2012-Release-of-the-ajax-control-toolkit.aspx Mais en cliquant sur http://wpl.codeplex.com/ semble être très mal passé en revue. p> p>
5 Réponses :
Comme votre code se tient maintenant en ce moment, un utilisateur peut simplement injecter JavaScript qui n'utilise pas une étiquette de script. P>
Il y a un Liste commune de vulnérabilités XSS pouvant être utilisée. p>
Vous acceptez maintenant une «chaîne», et tout ce que vous analysez les étiquettes HTML. Malheureusement, il y a beaucoup d'attaques XSS qui ne s'appuient pas sur HTML. P>
Par exemple, ajouter ce qui suit à une demande d'obtention dans Firefox: Votre meilleur pari consiste à utiliser le BIBLIOTHÈQUE ANTIXSSS à partir de Microsoft et coder spécifiquement les paramètres pour obtenir et Demandes postales. P>
(Je dois me rendre au travail, mais je posterai plus de code plus tard sur la façon de faire cela). P> % 22Onmouseover = Invite% 28% 29 // code> permettra à la personne d'injecter JavaScript. P>
J'ai regardé cela, mais les commentaires me mettent sur wPL.CodePlex.com/relases/view / 80289 # Avishand , s'il s'agit de la meilleure bibliothèque disponible aura un autre look ...
Il y a deux écoles de pensée principales pour protéger contre les attaques XSS.
pour codage de sortie, server.htmlencode (p.Message) devrait faire le tour (donc ce que vous avez actuellement dans votre exemple fonctionnera, n'a pas besoin de remplacer la regex si vous ne voulez pas à. Le codage de sortie empêchera XSS). Ici, je suppose que vous voulez faire un codage HTML et non un codage de l'URL ou similaire. P>
On dirait que vous utilisez le cadre .NET MVC. Vous pouvez utiliser Dataannotations a > Pour préformer la validation de liste blanche (autoriser uniquement les caractères sécurisés) contre la liste noire. Je regarderais à l'aide de RegularexpressionAttribute . Par exemple: p> espère que cela aide. P> p>
Je recommanderai une deuxième recommandation de validation blanche. Vous pouvez créer un ValidationAgute personnalisé
Essayez d'atténuer les dommages. Utilisez des jetons antiforgery, assurez-vous que vous n'acceptez que SSL pour certaines actions. Assurez-vous que les cookies sont correctement sécurisés. Globalement, minimisez la surface d'attaque et mettez des barrages routiers pour le rendre plus difficile. P>
paramétrise l'entrée de l'utilisateur, si vous ne pouvez pas paramétrer, encoder, mais faites très attention à l'encodage, de nombreux exploits ont été causés par un encodage incorrect. Le codage dépend également de l'endroit et de la manière dont l'entrée va être utilisée. Contraintenant et validez la saisie de l'utilisateur, assurez-vous que le serveur n'accepte que certains domaines d'entrée. Et comme avant, comprenez toutes les manières d'utiliser l'entrée. P>
Assurez-vous que vous avez obtenu un statut OK à partir du serveur Web. Si vous ne l'avez pas, gérer chaque réponse appropriée. Généralement, JQuery.ajax vous donne la possibilité de gérer toutes les réponses avec FAIT, FAIT, TOUJOURS et STUSYCODE, REPRENCEZ DE LA DOCUMENTATION JQUERY sur la manière de le faire correctement. P>
Utilisez le @ html.antiforgeryToken () dans vos formulaires et son attribut [validateantantOntRibUtTokenatRibute] correspondant à décorer vos classes et / ou méthodes. P> Li>
Entrée de la poignée de l'utilisateur correctement. Partout où les données sont touchées, le contexte doit être considéré s'il doit être codé ou paramétré, ou autrement validé, contraint ou modifié. P> li>
gérez correctement les réponses du serveur Web. P> li> ol>
[AttributeUnage (attributetaRgets.Method | attributetAregets.class, autorisationMultiple = false, héritée = vrai)]
Classe scellée publique validaeantIforgeryTokenattribute: filtreTribute, iAuthorizizIserFilter
{
Tâche publique
C'est mvc pas webapi
Remarque: strong> S'il vous plaît lire toute la réponse, je suis passé de la bibliothèque AntiXSS à HtmlSanitizer. Testez aussi test test! Je ne suis pas un expert en sécurité. Selon le responsable documentation , vous pouvez simplement faire ce qui suit dans votre web.config code>: p>
[JsonConverter(typeof(NoConverter))]
public string NewPassword { get; set; }
Comment cela fonctionne-t-il pour vous? Antixssencoder.htmlenCode code la chaîne sur HTML, alors comment peut-il faire correspondre des valeurs dans une API Web lorsque les données reçues sont JSON?
@THIERRY Si vous lisez toute ma réponse, vous remarquerez que je suis passée à la bibliothèque HTMLSanitizer à la manière. Mais en ce qui concerne votre commentaire, je ne comprends pas le problème? Évidemment, si vous comparez une chaîne assimilée à une non-désinfectée, elle ne correspond pas, mais cela ne devrait pas être un problème.
Pour arrêter les XSS lors de l'utilisation de webapi. Il est préférable d'utiliser le middleware pour éviter / arrêter les XSS. J'ai trouvé le meilleur lien / blog Veuillez préférer le lien ci-dessous sur le middleware ajouté.
https://www.loginradius.com/blog/async/anti-xsss-middleware-asp-core/ p>
Dans ce lien Tout est couvert s'il vous plaît allé à travers cela et mettre en œuvre. P>
Un seul problème à ajouter au middleware dans la classe STERTUP.CS. P>
app.UseMiddleware<AntiXssMiddleware>();
Duplicailler possible de SoftwareEngineering.stackexchange.com/Questtions/117512/...
Est-ce que cela répond à votre question? Antigranes dans ASP.NET CORE