2017-07-27 1 views
-1

J'ai un champ de recherche qui permet à certains caractères spéciaux (+, =, #. ', ") De taper et de rechercher, ici je dois valider l'entrée utilisateur contient tous les codes de serveur comme '' + System.Diagnostics.Process.Start (les "cmd.exe", "whoami") + '';) ..Comment valider l'entrée utilisateur contient le code serveur côté serveur en utilisant C#

Utilisez détails de cas: Un service WCF recueillir des idées JSON les données qui doivent être validées avant de les désérialiser pour éviter de créer un objet désérialisé.J'ai ajouté une validation personnalisée attribuée au contrat de service en utilisant IParameterInspector.Voici lors de la validation de chaque champs d'entrée dans l'événement beforecall je voudrais vérifier un champ comme code serveur ou non. attaque-Causes: Un- Les données JSON sérialisées aseptisées entraînent un déni de service d'application (DoS) solution: Le serveur doit valider et filtrer les données dans la requête JSON avant de les désérialiser.

Quelqu'un peut-il me dire comment interdire le code du serveur en ajoutant la validation pour les champs de saisie?

+0

Peut-être devriez-vous revoir le code afin de ne pas être vulnérable aux attaques par injection, plutôt que d'essayer de filtrer certaines entrées? –

Répondre

0

Si vous ne parvenez pas à vérifier l'entrée de l'utilisateur immédiatement après l'entrée utilisateur, vous pouvez ajouter un inspecteur de message côté client et/ou côté service qui vérifie le message avant le traitement de la requête sur le serveur.

Plus de détails sur le site officiel: https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/how-to-inspect-and-modify-messages-on-the-service

EDIT Vous pouvez spécifier un tableau avec des symboles qui ne sont pas autorisés et traiter uniquement le rquest si l'indice est, par exemple

if(input.IndexOfAny(new char[] { '+', '!', '\\', '&' })==-1) 
{ 
     ... 
} 

Vous pouvez également spécifier une liste de chaînes avec des mots ou seulement des symboles qui ne sont pas autorisés -à-dire

List<string> words = new List<string>(); 
words.Add("WhoAmI"); 
words.Add("&"); 
bool badWordDetected = words.Any(w => input.Contains(w)); 

Je recommande également de convertir l'entrée en majuscules ou inférieure, de sorte que le chèque peut être invariant de cas.

+0

@ Drahcir- J'ai mis en œuvre la validation d'entrée pour WCF comme suit MSDN MST - https://msdn.microsoft.com/en-us/library/ff647875.aspx. Ici, mon doute est de savoir comment vérifier l'entrée de l'utilisateur a des codes de serveur ou non. J'ai partagé Eg: TextSearch = "+ System.Diagnostics.Process.Start (" cmd.exe "," whoami ") + '', pouvez-vous partager une idée sur ce sujet –

+0

@ Drahcir- Réservoirs pour vos efforts .. Je Mon exigence est de désinfecter les entrées telles que htmlencode pour la saisie de la même manière que nécessaire pour encoder/désinfecter le code/langue du serveur.Il n'est pas possible de garder tous les mots clés .net dans la liste et de vérifier est-il possible d'analyser/encoder/désinfecter les entrées par rapport au code du serveur. –