{"id":6801,"date":"2017-11-28T08:45:56","date_gmt":"2017-11-28T07:45:56","guid":{"rendered":"https:\/\/www.combell.com\/fr\/blog\/?p=6801"},"modified":"2019-10-21T09:06:01","modified_gmt":"2019-10-21T07:06:01","slug":"injection-sql-comment-eviter","status":"publish","type":"post","link":"https:\/\/www.combell.com\/fr\/blog\/injection-sql-comment-eviter\/","title":{"rendered":"Qu\u2019est-ce qu\u2019une injection SQL et comment puis-je l\u2019\u00e9viter\u00a0?"},"content":{"rendered":"<p class=\"p2\"><span class=\"s1\">Cela fait d\u00e9j\u00e0 14 ans que l\u2019on conna\u00eet le danger que repr\u00e9sente une injection SQL. Pourtant, cela reste un des pires dangers auxquels sont expos\u00e9s les sites web dynamiques. Cette m\u00e9thode d\u2019attaque peut en effet causer d\u2019importants d\u00e9g\u00e2ts, comme la destruction des donn\u00e9es contenues dans votre base de donn\u00e9es. Mais de quoi s\u2019agit-il au juste\u00a0? Et comment peut-on y faire face\u00a0?<\/span><\/p>\n<h2 class=\"p3\"><span class=\"s1\">1. Qu\u2019est-ce qu\u2019une injection SQL\u00a0?<\/span><\/h2>\n<p class=\"p2\"><span class=\"s1\">Le web moderne regorge de sites dynamiques, qui sont g\u00e9n\u00e9r\u00e9s \u00e0 la vol\u00e9e. Un langage de script tel que PHP r\u00e9cup\u00e8re du contenu d\u2019une base de donn\u00e9es, et le met en forme par le biais d\u2019instructions ou de d\u00e9clarations. De telles instructions contiennent le code du d\u00e9veloppeur, ainsi que les donn\u00e9es que le visiteur fournit via un formulaire web, comme p. ex. lorsqu\u2019il saisit son nom d\u2019utilisateur et son mot de passe.<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">Lorsqu\u2019un d\u00e9veloppeur n\u2019est pas suffisamment vigilant dans ses d\u00e9clarations, une personne malintentionn\u00e9e peut glisser du code dans les donn\u00e9es qu\u2019elle saisit, ce qui lui permet de faire ex\u00e9cuter d\u2019autres instructions.<\/span><\/p>\n<blockquote>\n<p class=\"p2\"><span class=\"s1\"><i>En r\u00e9sum\u00e9, les hackers utilisent certains caract\u00e8res ou certaines formules dans le champ de saisie d\u2019un formulaire, de mani\u00e8re \u00e0 ce que leurs entr\u00e9es ne soient plus consid\u00e9r\u00e9es comme de simples cha\u00eenes de caract\u00e8res, mais bien comme des fonctions.<\/i><\/span><\/p>\n<\/blockquote>\n<p class=\"p2\"><span class=\"s1\">\u00a0<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><b>Ces signes peuvent p. ex. constituer un danger\u00a0:<\/b><\/span><\/p>\n<p><div class=\"su-list\" style=\"margin-left:0px\"><\/p>\n<ul>\n<li><i class=\"sui sui-warning\" style=\"color:#ffa62b\"><\/i> <span class=\"s1\"><b>* (ast\u00e9risque)<\/b> est une instruction qui demande \u00e0 la base de donn\u00e9es SQL d\u2019afficher toutes les colonnes pour la ligne s\u00e9lectionn\u00e9e dans la base de donn\u00e9es<\/span><\/li>\n<li><i class=\"sui sui-warning\" style=\"color:#ffa62b\"><\/i> <span class=\"s1\"><b>= (\u00e9gal \u00e0)<\/b> est une instruction qui demande \u00e0 la base de donn\u00e9es SQL de n\u2019afficher que la\/les valeur(s) qui correspond(ent) \u00e0 la cha\u00eene de caract\u00e8res recherch\u00e9e<\/span><\/li>\n<li><i class=\"sui sui-warning\" style=\"color:#ffa62b\"><\/i> <span class=\"s1\"><b>&lsquo; (guillemet simple)<\/b> est utilis\u00e9 pour dire \u00e0 la base de donn\u00e9es SQL o\u00f9 la cha\u00eene de recherche commence ou se termine<\/span><\/li>\n<li><i class=\"sui sui-warning\" style=\"color:#ffa62b\"><\/i> <span class=\"s1\"><b>; (point-virgule)<\/b> est utilis\u00e9 pour dire \u00e0 l\u2019analyseur SQL que la d\u00e9claration actuelle est termin\u00e9e<\/span><\/li>\n<li><i class=\"sui sui-warning\" style=\"color:#ffa62b\"><\/i> <span class=\"s1\"><b>&#8212; (double tiret)<\/b> est utilis\u00e9 pour dire \u00e0 l\u2019analyseur SQL que le reste de la ligne est un commentaire et ne doit pas \u00eatre ex\u00e9cut\u00e9.<\/span><\/li>\n<\/ul>\n<p><\/div><\/p>\n<p class=\"p2\"><span class=\"s1\">Vous pouvez facilement imaginer les abus pouvant potentiellement d\u00e9couler de l\u2019utilisation de ces signes\u00a0!<\/span><\/p>\n<h2 class=\"p3\"><span class=\"s1\">2. Quels sont les dangers d\u2019une injection SQL\u00a0?<\/span><\/h2>\n<p class=\"p2\"><span class=\"s1\">Une injection SQL consiste donc \u00e0 ajouter du code suppl\u00e9mentaire aux entr\u00e9es. Si aucune pr\u00e9caution n\u2019a \u00e9t\u00e9 prise dans le script pour anticiper de telles situations, le code sera ex\u00e9cut\u00e9, avec tous les dangers que cela comporte.<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><b>L\u2019attaquant peut\u00a0:<\/b><\/span><\/p>\n<p><div class=\"su-list\" style=\"margin-left:0px\"><\/p>\n<ul>\n<li><i class=\"sui sui-warning\" style=\"color:#ff322b\"><\/i> <span class=\"s1\">Ajouter, modifier ou lire des donn\u00e9es contenues dans la base de donn\u00e9es<\/span><\/li>\n<li><i class=\"sui sui-warning\" style=\"color:#ff322b\"><\/i> <span class=\"s1\">Lire le code source de fichiers se trouvant sur le serveur de bases de donn\u00e9es<\/span><\/li>\n<li><i class=\"sui sui-warning\" style=\"color:#ff322b\"><\/i> <span class=\"s1\">\u00c9crire des fichiers dans la base de donn\u00e9es.<\/span><\/li>\n<\/ul>\n<p class=\"p2\"><span class=\"s1\"><\/div>\u00a0<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><b>Voici un exemple qui devrait clairement illustrer cela.<\/b><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>txtUserId = getRequestString(\"UserId\");<\/i><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>txtSQL = \"SELECT * FROM Users WHERE UserId = \" + txtUserId;<\/i><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">Ce code est utilis\u00e9 pour cr\u00e9er une d\u00e9claration SQL dont le but est de s\u00e9lectionner un utilisateur correspondant \u00e0 un certain identifiant. Mais que se passe-t-il si l\u2019utilisateur ajoute le code suivant en tant que UserID dans le formulaire\u00a0?<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">105 OR 1=1<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">La d\u00e9claration prendra alors la forme suivante\u00a0:<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>SELECT * FROM Users WHERE UserId = 105 OR 1=1;<\/i><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">Cons\u00e9quence\u00a0: alors que le but initial \u00e9tait de n\u2019afficher qu\u2019une seule ligne, \u00e0 savoir celle correspondant \u00e0 l\u2019identifiant de l\u2019utilisateur (UserID) compl\u00e9t\u00e9 lors de la saisie, <b>TOUTES les lignes sont \u00e0 pr\u00e9sent affich\u00e9es<\/b>, du fait que la condition OR est toujours vraie (puisque 1=1). Lorsque le tableau Users ne contient pas uniquement des noms d\u2019utilisateurs mais <b>aussi des mots de passe<\/b>, c\u2019est la catastrophe\u00a0!<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-6803 size-full\" src=\"https:\/\/www.combell.com\/fr\/blog\/files\/2017\/12\/SQL-injection-cartoon.png\" alt=\"SQL injection cartoon\" width=\"666\" height=\"205\" srcset=\"https:\/\/www.combell.com\/fr\/blog\/files\/2017\/12\/SQL-injection-cartoon.png 666w, https:\/\/www.combell.com\/fr\/blog\/files\/2017\/12\/SQL-injection-cartoon-300x92.png 300w\" sizes=\"(max-width: 666px) 100vw, 666px\" \/><\/span><\/p>\n<h2 class=\"p3\"><span class=\"s1\">3. Comment pouvez-vous vous prot\u00e9ger contre une injection SQL\u00a0?<\/span><\/h2>\n<p class=\"p2\"><span class=\"s1\">Les trois principales m\u00e9thodes qui prot\u00e8geront votre site web contre de telles injections sont les suivantes\u00a0:<\/span><\/p>\n<p><div class=\"su-list\" style=\"margin-left:0px\"><\/p>\n<ul>\n<li><i class=\"sui sui-check-circle\" style=\"color:#16c32a\"><\/i> <span class=\"s1\"><b>Modification des types de donn\u00e9es <\/b>(d\u00e9terminer \u00e0 l\u2019avance les types de donn\u00e9es que vous attendez pour la variable). S\u2019agit-il d\u2019un entier, d\u2019une cha\u00eene de caract\u00e8res ou d\u2019un bool\u00e9en (vrai\/faux)\u00a0? En PHP, pour un entier, vous pouvez p. ex. utiliser le code suivant\u00a0:<\/span><\/li>\n<\/ul>\n<p><\/div><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>$id = (int)$_GET['id'];<\/i><\/span><\/p>\n<p><div class=\"su-list\" style=\"margin-left:0px\"><\/p>\n<ul>\n<li><i class=\"sui sui-check-circle\" style=\"color:#16c32a\"><\/i> <span class=\"s1\"><b>Cha\u00eenes \u00e9chapp\u00e9es <\/b>(\u00e9chapper les caract\u00e8res sp\u00e9ciaux tels que &lsquo;). En PHP, utilisez pour ce faire la fonction suivante\u00a0:<\/span><\/li>\n<\/ul>\n<p><\/div><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>mysqli_real_escape_string()<\/i><\/span><\/p>\n<p><div class=\"su-list\" style=\"margin-left:0px\"><\/p>\n<ul>\n<li><i class=\"sui sui-check-circle\" style=\"color:#16c32a\"><\/i> <span class=\"s1\"><b>D\u00e9clarations pr\u00e9par\u00e9es<\/b> (d\u00e9finir la structure d\u2019une requ\u00eate \u00e0 l\u2019avance). En PHP, vous pouvez cr\u00e9er une d\u00e9claration pr\u00e9par\u00e9e comme ceci\u00a0:<\/span><\/li>\n<\/ul>\n<p><\/div><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>mysqli_stmt_init<\/i><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">Pour ensuite ex\u00e9cuter la d\u00e9claration pr\u00e9par\u00e9e comme suit\u00a0:<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\"><i>mysqli_stmt_prepare<\/i><\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">Si vous d\u00e9sirez en savoir plus, n\u2019h\u00e9sitez pas \u00e0 visiter les pages suivantes\u00a0: <a href=\"http:\/\/php.net\/manual\/en\/language.types.type-juggling.php\" target=\"_blank\" rel=\"noopener\"><span class=\"s3\">modification des types de donn\u00e9es<\/span><\/a>, <a href=\"http:\/\/php.net\/manual\/en\/mysqli.quickstart.prepared-statements.php\" target=\"_blank\" rel=\"noopener\"><span class=\"s3\">requ\u00eates pr\u00e9par\u00e9es<\/span><\/a> et\u00a0<a href=\"https:\/\/www.w3schools.com\/sql\/sql_injection.asp\" target=\"_blank\" rel=\"noopener\"><span class=\"s3\">W3Schools sur les injections SQL<\/span><\/a>.<\/span><\/p>\n<h2><strong>4. Protection contre les injections SQL fournie par Combell<\/strong><\/h2>\n<p class=\"p2\"><span class=\"s1\">Saviez-vous d\u2019ailleurs qu\u2019en choisissant votre h\u00e9bergement chez Combell, vous b\u00e9n\u00e9ficiez de la <a href=\"https:\/\/www.combell.com\/fr\/securite-sur-mesure\"><span class=\"s3\">meilleure s\u00e9curit\u00e9 disponible sur le march\u00e9<\/span><\/a><\/span><span class=\"s4\">\u00a0<\/span><span class=\"s1\">?\u00a0<\/span>Vous pouvez simplement activer la protection contre les injections SQL en un seul clic dans votre panneau de contr\u00f4le. Rendez-vous dans <a href=\"https:\/\/my.combell.com\" target=\"_blank\" rel=\"noopener\">my.combell.com<\/a>, o\u00f9 vous cliquerez sur l\u2019onglet \u00ab\u00a0filtres web\u00a0\u00bb dans les \u00ab\u00a0param\u00e8tres du site\u00a0\u00bb.<\/p>\n<p>La protection fournie par Combell ne s\u2019arr\u00eate cependant pas l\u00e0\u00a0!\u00a0<span class=\"s1\">Combell propose m\u00eame le <a href=\"https:\/\/www.combell.com\/fr\/blog\/votre-site-web-est-toujours-protege-grace-au-patching-automatique-combell\/\"><span class=\"s3\">patching automatique<\/span><\/a>, qui prot\u00e8ge \u00e9galement votre h\u00e9bergement de SGC (<a href=\"https:\/\/www.combell.com\/fr\/hebergement\/hebergement-wordpress\"><span class=\"s3\">WordPress<\/span><\/a>, <a href=\"https:\/\/www.combell.com\/fr\/hebergement\/hebergement-magento\"><span class=\"s3\">Magento<\/span><\/a>, <a href=\"https:\/\/www.combell.com\/fr\/hebergement\/hebergement-joomla\"><span class=\"s3\">Joomla<\/span><\/a> et <a href=\"https:\/\/www.combell.com\/fr\/hebergement\/hebergement-drupal\"><span class=\"s3\">Drupal<\/span><\/a>) contre les vuln\u00e9rabilit\u00e9s les plus r\u00e9centes.<\/span><\/p>\n<p class=\"p2\"><span class=\"s1\">\u00a0<\/span><\/p>\n<p class=\"p5\" style=\"text-align: center;\"><span class=\"s5\"><a class=\"cta_button\" href=\"https:\/\/www.combell.com\/fr\/hebergement\/combell-shield\">D\u00e9couvrez le niveau de protection exceptionnel qu\u2019offre l\u2019h\u00e9bergement de Combell<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cela fait d\u00e9j\u00e0 14 ans que l\u2019on conna\u00eet le danger que repr\u00e9sente une injection SQL. Pourtant, cela reste un des pires dangers auxquels sont expos\u00e9s les sites web dynamiques. Cette...<\/p>\n","protected":false},"author":1,"featured_media":7262,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[63],"tags":[],"acf":[],"uagb_featured_image_src":{"full":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection.jpg",1000,350,false],"thumbnail":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-50x50.jpg",50,50,true],"medium":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-300x105.jpg",300,105,true],"medium_large":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-768x269.jpg",768,269,true],"large":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-1024x358.jpg",1024,358,true],"1536x1536":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection.jpg",1000,350,false],"2048x2048":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection.jpg",1000,350,false],"post-featured":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-850x290.jpg",850,290,true],"post-featured-opt":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-750x256.jpg",750,256,true],"post-featured-opt-md":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-850x290.jpg",850,290,true],"post-featured-opt-sm":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-485x165.jpg",485,165,true],"post-featured-opt-xs":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-375x128.jpg",375,128,true],"post-most-popular":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-50x50.jpg",50,50,true],"post-author":["https:\/\/www.combell.com\/fr\/blog\/files\/SQL-Injection-60x60.jpg",60,60,true]},"uagb_author_info":{"display_name":"Combell","author_link":"https:\/\/www.combell.com\/fr\/blog\/author\/blogadmin\/"},"uagb_comment_info":2,"uagb_excerpt":"Cela fait d\u00e9j\u00e0 14 ans que l\u2019on conna\u00eet le danger que repr\u00e9sente une injection SQL. Pourtant, cela reste un des pires dangers auxquels sont expos\u00e9s les sites web dynamiques. Cette...","_links":{"self":[{"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/posts\/6801"}],"collection":[{"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/comments?post=6801"}],"version-history":[{"count":10,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/posts\/6801\/revisions"}],"predecessor-version":[{"id":7264,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/posts\/6801\/revisions\/7264"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/media\/7262"}],"wp:attachment":[{"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/media?parent=6801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/categories?post=6801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.combell.com\/fr\/blog\/wp-json\/wp\/v2\/tags?post=6801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}