La meilleure Façon de Prévenir l'Injection SQL à l'Aide de Javascript ou C#?
Je suis en train d'écrire une application qui utilise ajax sur l'extrémité avant et ASP.NET (C#) sur l'extrémité arrière..
Une Petite Partie de la demande ne un appel AJAX vers le serveur cible de code (pour obtenir les entrées de la base de données SQL)
Comment puis-je empêcher SQL de JScript injection?
Je sais que c'est généralement pas sûr de valider avec javascript parce que le javascript peut être désactivé, mais comme c'est un appel AJAX donc, si l'utilisateur a javascript désactivé l'AJAX ne sera jamais exécuté.
Quel est le meilleur moyen de valider ou d'échapper à l'entrée?
Comme Add_Slashes() en PHP?
Grâce
Daniel
Je dirais que l'utilisation de paramètres SQL dans les Commandes SQL (qui permet d'éviter la concaténation des morceaux de SQL avec les données de l'utilisateur) devrait éliminer la plupart des problèmes.
OriginalL'auteur Daniel Upton | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
Utiliser des requêtes paramétrées, jamais construire des chaînes de code SQL.
la façon dont les paramètres sont paramétrés dans le code repose sur les langues, les serveurs de base de données et les cadres sur le serveur. Il y a trop peu d'informations dans la question de donner un bon exemple ici (il ne spécifie C# comme langage, mais ne contient aucune information au sujet de la DB ou l'accès aux données-cadre).
Je suis d'accord, mais je pense que même un exemple simple de comment paramétrer les requêtes aurait aidé ici. Jamais l'esprit, alors. C'est un petit problème.
Cette réponse sert comme une bonne pratique en la matière (si vous utilisez une API et non pas la construction de votre propre). Néanmoins, il ne répond qu'en partie.
OriginalL'auteur Lucero
Protection contre les injections SQL doit prendre place sur le côté serveur, indépendamment de l'endroit où l'appel entrant.
Javascript assainissement méthodes sont toujours inutile parce que le Javascript s'exécute côté client, et ne peut donc être forgé.
Ceci s'applique également pour les appels AJAX: Le client n'a pas besoin d'activer JavaScript désactivé; ils ont juste besoin de manipuler le code Javascript à télécharger à partir de votre site à faux de validation.
Jamais, jamais, jamais s'appuyer sur le côté client, les données de l'assainissement.
Merci!Vraiment utile d'info..
OriginalL'auteur Pekka 웃
Je pense que l'utilisation Parametirized Requête au lieu de Adhoc SQL
OriginalL'auteur TalentTuner
Quoi que vous fassiez, vous devez TOUJOURS exécuter le code de validation sur le serveur.
De l'appel ajax inévitablement frappe le serveur, afin de valider la saisie de l'utilisateur il y pour éviter les attaques par injection sql.
La seule raison pour la validation de la saisie de l'utilisateur sur le client afin d'éviter qu'un appel vers le serveur, par exemple, un utilisateur n'a pas de remplir un champ obligatoire.
Sur le serveur, si vous utilisez LINQ to SQL ou des Entités de mise à jour de la base de données, vous obtenez gratuitement des requêtes paramétrées, qui permettent d'éviter les attaques par Injection SQL.
Jamais, jamais écrire de la plaine des chaînes de sql et de la base de données, sauf si vous EXPLICITEMENT utiliser des requêtes paramétrées.
Mais il suffit d'utiliser LINQ et vous en gardez-vous (vous et votre client!) coffre-fort.
OriginalL'auteur awrigley
À l'aide de Lier des Paramètres est la façon à prévenir l'injection SQL:
http://use-the-index-luke.com/where-clause/bind-parameters
C'est ok pour effectuer la validation côté client ainsi, mais juste pour améliorer la facilité d'utilisation.
OriginalL'auteur Markus Winand
Le manque de sécurité de validation Javascript n'a rien à voir avec le fait que le Javascript peut être désactivé.
Que le Javascript peut être désactivé signifie qu'une erreur de bonne foi peut faire quelque chose de mal, ou d'entraîner un défaut de message serveur plutôt que de l'utile. Alors qu'ils pourraient accidentellement déclencher un problème de sécurité (en fait, j'ai fait cela en tant qu'utilisateur, le pire peu est mon entrée est valide, mais l'une des personnes dont les noms, j'ai été saisie avait un
'
en elle, de plus en plus sur ce ci-dessous). Cela affecte honnête, mais imparfaite, les utilisateurs, pas des craquelins.Un pirate doit être en mesure de rejouer une requête AJAX avec des valeurs différentes dans environ 30 secondes, y compris le temps passé à faire de stupide menaces sur les sites de médias sociaux dans une autre fenêtre. Il n'est pas techniquement difficile. C'est pourquoi la validation Javascript n'a pas de valeur de sécurité, et est le seul à faire la validation pour les erreurs de bonne foi plus convivial (par le fait d'avoir une réponse plus immédiate, et être en mesure de diriger l'accent sur le mauvais terrain).
De plus, ce n'est généralement pas une question de validation, mais de l'encodage. Certaines personnes d'essayer de "réparer" les attaques par injection SQL par l'interdiction des séquences qui peuvent provoquer des, ce qui implique le plus souvent l'interdiction de caractères apostrophe. Puis ils ont mis cette logique dans les champs, que l'on peut raisonnablement contenir des apostrophes. En particulier, ne jamais faire cela avec les champs de nom; les gens n'aime vraiment pas être dit que leur nom est "mauvais", et au pire il peut se sentir comme le racisme ou l'insensibilité culturelle, puisque vous en trouverez beaucoup dans, par exemple, français ou Irlandais les noms, mais pas si souvent en anglais ou en allemand, les noms (oui je sais c'est le nom anglais d'origine Normande souvent, mais j'ai aussi entendu des gens avec des apostrophes dans leurs noms de rodomontades sur la bêtise raciste site web qui ne les laissera pas entrer leur nom correctement, ce qui est probablement le pire moment pour afficher les Normands comme une correction).
Valider pour l'manifestement erronées en Javascript comme un moyen d'améliorer l'INTERFACE utilisateur.
Valider pour l'manifestement erronée sur le serveur à la fois comme un moyen d'améliorer l'INTERFACE utilisateur et un moyen d'attraper des attaques.
Transmettre vos données à d'autres couches de manière correcte. En termes de SQL, cela signifierait l'encodage de la chaîne de délimiteurs (encore une fois,
'
est le cas le plus courant, mais certains autres délimiteurs sont possibles avec certaines bases de données), pour qui la meilleure facon de le faire est par le biais d'une bibliothèque qui le fait pour vous. Dans le cas de C#, cela signifierait à l'aide deParameters
avec ADO.NET plutôt que de construire SQL vous-même (il y a d'autres avantages à cette trop).OriginalL'auteur Jon Hanna
Il y a deux concepts qui sont souvent mélangés. La Validation et de l'encodage/de s'échapper. L'ajout d'une barre oblique est une tentative de coder les données d'un contexte. La Validation est de s'assurer que les données sont valides selon le domaine.
Pour répondre à votre question, le meilleur moyen d'éviter ce problème est double. D'abord valider les données sur le côté serveur (assurez-vous qu'un nombre est, en effet, un nombre, etc.). Cependant, la validation n'est pas suffisant pour éviter ces problèmes. Le nom "O'Brian" est un exemple d'un nom valide, donc il passera à la validation, mais il peut causer des problèmes de javascript ou dans une instruction SQL.
Donc, la prochaine partie est sensible au contexte d'encodage. Lors de coller les données dans une instruction SQL, vous devez vous échapper/encoder pour SQL. La méthode la plus simple et la plus sûre manière de faire ceci est d'utiliser des requêtes paramétrées, où tout est fait pour vous.
Plus d'infos: http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
Lorsque les données sont envoyées vers le client, vous devez vous échapper/encoder les données pour le format de renvoyer les données. Pour éviter l'injection de scripts que vous devez savoir si vous êtes en échappant à l'intérieur d'un json-chaîne, à l'intérieur d'un HTML-attribut etc. etc.. Voir ici pour plus d'informations sur la façon de s'échapper pour les différents contextes: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
Utilisation anti-xss pour échapper/encodage pour le web: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=f4cd231b-7e06-445b-bec7-343e5884e651
OriginalL'auteur Erlend