Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 16201|Répondre: 0

[ASP.NET] ASP.NET de l’injection Anti-SQL

[Copié le lien]
Publié sur 17/04/2015 13:06:50 | | |

1. Qu’est-ce que l’injection SQL ?
     L’injection SQL consiste à insérer des commandes SQL dans le formulaire pour soumettre ou saisir la chaîne de requête du nom de domaine ou de la requête de page, et enfin tromper le serveur pour qu’il exécute certaines commandes SQL malveillantes. En soumettant des paramètres pour construire des instructions SQL intelligentes, vous pouvez obtenir avec succès les données souhaitées.

2. SQL type d’injection
Plus précisément, l’injection SQL peut être divisée en cinq catégories, à savoir : injection de nombres, injection de caractères, injection de recherche (comme ça), injection en interne, et injection de connexion de phrases.
Du point de vue de l’application, une attention particulière doit être portée à l’injection SQL dans l’IP, la recherche, la suppression par lots et le transfert de base de données à base de données.

3. Comment injecter

Voyons un exemple typique
SqlCommand cmd = new SqlCommand(« SELECT * FROM PE_USERS WHERE UserName = ' »
2+ Nom d’utilisateur + « ' ET Mot de passe utilisateur = ' » + Mot d’accès + « ' », conn) ;

Puisqu’il n’y a pas de validation pour UserName et PassWord, si UserName="admin' OR 1=1-- »
L’instruction SQL exécutée devient :

SÉLECTIONNEZ * DEPUIS PE_USERS OÙ UserName='admin' OU 1=1—' ET UserPassword=''

Cela entraîne une injection SQL, et les conditions sont toujours valables, ce qui permet de vous connecter avec succès sans mot de passe.



4. Comment prévenir l’injection SQL

1. Filtrer ou convertir les chaînes suspectes

      L’injection SQL est empêchée en écrivant des fonctions qui filtrent ou convertissent les chaînes dangereuses, puis utilisent GLOBAL.ASAX ou réécrivent les instances contextuelles

     Voici un exemple

bool statique public SqlFilter2(chaîne InText)
2  {
3 string word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join » ;
4 if(InText==null)
5 retourner faux ;
6 forach (chaîne i dans le mot). Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+ » « )>-1)|| (InText.ToLower(). IndexOf( » « +i)>-1))
9    {
10 reviennent vrais ;
11    }
12   }
13 retourne faux ;
14  }


2. Global.asax

vide protégé Application_BeginRequest(Object sender, EventArgs e)
2  {
3 // Parcourir les paramètres Post, sauf pour les domaines cachés
4 Foreach (la chaîne I dans ceci. Demande.Formulaire)
5   {
6 if(i=="__VIEWSTATE »)continuez ;
7 this.goErr(this). Request.Form.ToString()) ;   
8   }
9 // Traversez le paramètre Get.
10 de forage (chaîne i dans ce livre). Request.QueryString)
11   {
12 this.goErr(this). Request.QueryString.ToString()) ;   
13   }
14  }
vide privé goErr(chaîne tm)
2  {
3 si (WLCW. Extend.CValidity.SqlFilter2(tm))
4 Ça. Response.end()
5  }

Avantages : cet aspect est utilisé par la plupart des programmeurs débutants pour empêcher l’injection SQL, et il semble bien fonctionner dans la plupart des cas.

Inconvénients : 1. Il filtre certains caractères qui n’étaient pas utilisés à l’origine pour l’injection, causant des problèmes inattendus. Par exemple, si le nom d’un membre du forum contient les mêmes caractères que les caractères filtrés, cela provoquera des problèmes et des difficultés inattendus.

        2. Un filtrage ou une conversion est nécessaire à chaque fois, ce qui réduit l’efficacité du programme

2. Utiliser des procédures stockées pour les requêtes paramétriques

Le principal objectif de l’injection SQL est d’exécuter des commandes malveillantes dans la base de données en soumettant du code SQL malveillant. Ainsi, tant que les commandes SQL sont traitées avant l’exécution, l’injection SQL peut être efficacement empêchée. Les requêtes paramétrées peuvent efficacement empêcher l’injection SQL.

Exemple

const string strSql = « SELECT * FROM [PE_Users] WHERE UserName = @UserName » ;
Paramètres parms = nouveaux Paramètres(« @UserName », DbType.String, userName) ;

Il existe un paramètre @UserName ci-dessus, utilisant l’objet Prarmeter, par lequel le paramètre est ajouté à l’objet Commande,
Cela vous donne une requête paramétrée.
Comme décrit ci-dessus, ADO.NET envoie la déclaration SQL suivante à SQL Server :

Exécutif sp_executesql N 'select * from [pe_users] où username=@username ',N
'@username nvarchar(20) ',@username=N 'nom'

SQL Server remplace @username par la chaîne « name » avant d’exécuter la requête.
Supposons que vous ayez les entrées suivantes :

'union select @@version, null, null—

L’instruction SQL générée ressemble à ceci :

Exécutif sp_executesql N 'select * from [pe_users] où username=@username ',N
'@username nvarchar(20) ',@username=N ''' union select @@version,null,null-- '

Vous pouvez voir que ADO.NET échappe à l’entrée.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Code de copie


DbTye ou SqlDbType peuvent être une variété de types de données.
Vous pouvez choisir en fonction de votre type de données.
Dans certains endroits, il peut aussi être utilisé pour spécifier la longueur du paramètre : int size. Cela évite également efficacement les débordements de bases de données et les notes SQL
Possibilité d’entrer.
Avantages : Empêche efficacement l’injection SQL.
Inconvénients : Certains endroits ne peuvent pas être appliqués, comme dans.

3. Liste blanche

Description :
Certaines plages de paramètres connues peuvent être gérées sous forme de whitelists, ce qui peut empêcher l’injection SQL et l’interrogation
Faux, par exemple : ordre par + nom de colonne, lorsque le nom de la colonne est passé sous forme de paramètre, une liste blanche peut être formulée pour juger d’abord le paramètre
que le numéro soit dans la liste blanche, puis interrogez, sinon il sera traité incorrectement.
Avantages : sûr et fiable
Inconvénients : Petit nombre d’applications




Précédent:La boîte de texte ne permet d’entrer que des chiffres
Prochain:asp.net Éditeur de texte (FCKeditor)
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com