Une valeur Request.Form potentiellement dangereuse a été détectée depuis le client

Une valeur Request.Form potentiellement dangereuse a été détectée depuis le client


Source : Stack Overflow).)

Je pense que vous abordez le problème sous le mauvais angle en essayant d’encoder toutes les données postées.

Notez qu’un “<” pourrait également provenir d’autres sources externes, comme un champ de base de données, une configuration, un fichier, un flux et ainsi de suite.

De plus, “<” n’est pas intrinsèquement dangereux. Il n’est dangereux que dans un contexte spécifique : lors de l’écriture de chaînes qui n’ont pas été encodées dans une sortie HTML (à cause du XSS).

Dans d’autres contextes, différentes sous-chaînes sont dangereuses, par exemple, si vous écrivez une URL fournie par l’utilisateur dans un lien, la sous-chaîne “javascript:” peut être dangereuse. Le caractère apostrophe, en revanche, est dangereux lors de l’interpolation de chaînes dans des requêtes SQL, mais parfaitement sûr s’il fait partie d’un nom soumis depuis un formulaire ou lu depuis un champ de base de données.

En résumé : vous ne pouvez pas filtrer une entrée aléatoire pour les caractères dangereux, car tout caractère peut être dangereux dans les bonnes circonstances. Vous devriez encoder au point où certains caractères spécifiques peuvent devenir dangereux parce qu’ils passent dans un sous-langage différent où ils ont une signification spéciale. Lorsque vous écrivez une chaîne en HTML, vous devriez encoder les caractères qui ont une signification spéciale en HTML, en utilisant Server.HtmlEncode. Si vous passez une chaîne à une instruction SQL dynamique, vous devriez encoder différents caractères (ou mieux, laisser le framework le faire pour vous en utilisant des instructions préparées ou similaires).

Lorsque vous êtes sûr d’encoder en HTML partout où vous passez des chaînes en HTML, alors définissez ValidateRequest="false" dans la directive <%@ Page ... %> de votre (vos) fichier(s) .aspx.

Dans .NET 4, vous pourriez avoir besoin de faire un peu plus. Parfois il est nécessaire d’ajouter également <httpRuntime requestValidationMode="2.0" /> à web.config (référence).