11
votes

Arrêter des XSS lors de l'utilisation de Web API

J'ai un contrôleur qui accepte xxx

j'ai une action de post WebAPI xxx

et une action d'obtenir.

É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é.

Je veux protéger contre les XSS. Pour le moment, je fais xxx

dans l'action d'obtention. (Pris un certain code de Utilisation d'expressions régulières C # pour supprimer les balises HTML < / a>)

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?

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.


2 commentaires

Duplicailler possible de SoftwareEngineering.stackexchange.com/Questtions/117512/...


Est-ce que cela répond à votre question? Antigranes dans ASP.NET CORE


5 Réponses :


12
votes

Comme votre code se tient maintenant en ce moment, un utilisateur peut simplement injecter JavaScript qui n'utilise pas une étiquette de script.

Il y a un Liste commune de vulnérabilités XSS pouvant être utilisée.

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.

Par exemple, ajouter ce qui suit à une demande d'obtention dans Firefox: % 22Onmouseover = Invite% 28% 29 // permettra à la personne d'injecter JavaScript.

Votre meilleur pari consiste à utiliser le BIBLIOTHÈQUE ANTIXSSS à partir de Microsoft et coder spécifiquement les paramètres pour obtenir et Demandes postales.

(Je dois me rendre au travail, mais je posterai plus de code plus tard sur la façon de faire cela).


1 commentaires

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 ...



7
votes

Il y a deux écoles de pensée principales pour protéger contre les attaques XSS.


1 commentaires

Je recommanderai une deuxième recommandation de validation blanche. Vous pouvez créer un ValidationAgute personnalisé



-3
votes

Pour protéger contre les failles de sécurité du Web:

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.

Pour protéger contre les utilisateurs saisis:

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.

Manipulation de la réponse du serveur Web:

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.

Trois choses que vous devez faire:
  1. Utilisez le @ html.antiforgeryToken () dans vos formulaires et son attribut [validateantantOntRibUtTokenatRibute] correspondant à décorer vos classes et / ou méthodes.

  2. 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é.

  3. gérez correctement les réponses du serveur Web.

    [AttributeUnage (attributetaRgets.Method | attributetAregets.class, autorisationMultiple = false, héritée = vrai)] Classe scellée publique validaeantIforgeryTokenattribute: filtreTribute, iAuthorizizIserFilter { Tâche publique ExecuteAuthorizationFilterAsync (HttpActionContext ActionContext, CancellationToken cancellationToken, Func continuation >) { essayer { Antiforgery.validate (); } attraper { actionContext.response = nouveau httpresponsonsemessage { StatusCode = httpstauscode.Forbiden, DemandeMessage = ActionContext.ControlContext.Request }; retour FromResult (actionContext.Response); } continuation de retour (); } Tâche privée DROSULT (HTTPRESPONSEMESSEMESSAGE) { var source = nouvelle tâchePompletSource (); source.setresulte (résultat); retour source.task; } }


1 commentaires

C'est mvc pas webapi



10
votes

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; }


2 commentaires

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.



1
votes

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>();


0 commentaires