Formation PUB010 : PHP, 2022 Sécuriser le code

21.1 Quelques types d'attaques


En tant que développeurs Web, vous devez être au courant des attaques qui pourraient être menées contre les sites que vous développez. Ceci vous permettra de mieux protéger votre code et vos données.

Voici quelques types d'attaques. Il en existe de nombreux autres. Ceci ne constitue qu'un minimum à connaître. De plus, les descriptions et exemples présentés ici ne constituent qu'une partie des techniques mises en place par les utilisateurs malveillants.

À vous de vous tenir informés des meilleures stratégies de protection pour vos applications.

Ne tentez jamais une attaque sur un site pour lequel vous n'avez pas de permission écrite de la part du propriétaire.

Une telle tentative pourrait mener à des accusations criminelles.

▼Publicité Le texte se poursuit plus bas

Injection SQL

Qu'est-ce que c'est ?

L'injection SQL est une technique qui consiste à exécuter des requêtes SQL qui n'étaient pas prévues par le programme original.

Qu'est-ce qui rend cette attaque possible ?

Ceci est possible lorsqu'une requête utilise des valeurs entrées par l'usager (ex : SELECT description FROM produits WHERE id=$id, où $id serait une information entrée dans un formulaire Web, dans l'URL, dans un cookie, etc.).

Comment les utilisateurs malveillants font-ils ?

Les utilisateurs malveillants vont utiliser des caractères particuliers (ex : apostrophe ('), commentaires (--)) pour altérer la requête ou encore la clause SQL UNION pour ajouter d'autres résultats sous la requête originale.

Prenons le cas où l'usager entre l'URL suivant dans son navigateur :

    https://mondomaine.com/unepageweb.php?id=3+UNION+SELECT+CONCAT_WS(CHAR(32,58,32),user(),database(),version())

Notez ici que char(32) est un espace et char(58) représente les deux points (:). Le malfaiteur a donc pris le temps de bien formatter sa sortie!

Selon la façon dont la page a été programmée, il pourrait obtenir le nom de l'usager MySQL, le nom de la BD et la version MySQL, ce qui est amplement suffisant pour poursuivre ses manoeuvres malveillantes.

Voici un exemple de ce qu'il pourrait obtenir :

Résultat à l'écran

Une information légitime

Une autre inforation légitime

usagermysql@localhost : ma_bd : 10.4.18-MariaDB - 1

Comment s'en protéger ?

La principale protection contre les injections SQL consiste à utiliser les requêtes préparées lorsqu'une requête utilise des informations entrées par l'usager.

Attaque XSS (Cross site scripting)

Qu'est-ce que c'est ?

L'attaque XSS consiste à exécuter du code côté client, code qui n'était pas prévu par le programme original. Ce code est généralement du JavaScript.

Qu'est-ce qui rend cette attaque possible ?

Ceci est possible quand le programme affiche à l'écran des valeurs entrées par l'usager (ex : echo $_GET['id']). Autre cas de figure : les informations entrées par l'usager sont enregistrées dans la BD et l'attaque survient plus tard quand les informations sont lues dans la BD et affichées à l'écran.

Comment les utilisateurs malveillants font-ils ?

Ils tentent d'entrer une balise <script> ou encore un attribut HTML qui lance du JavaScript (ex : ajout d'un attribut onmouseover) soit dans un formulaire Web, soit dans un URL, soit dans un cookie.

Par exemple, l'usager malveillant pourrait entrer l'information suivante dans un commentaire : <script>alert('Cassé!');</script>. L'attaque surviendrait quand ce commentaire, après avoir été enregistré dans la BD, serait affiché à l'écran.

L'affichage d'une alerte n'est pas une attaque bien dangereuse mais elle indique à l'utilisateur malveillant que le code n'est pas sécurisé, ce qui ouvre la porte à des attaques beaucoup plus sérieuses, comme par exemple le vol des informations d'authentifications contenues dans un cookie.

Comment s'en protéger ?

La principale protection contre les attaques XSS consiste à bloquer les balises <script>, soit en utilisant un filtre (ex : filter_input()) ou encore à l'aide de htmlspecialchars().

Attaque CSRF (Cross site request forgery, attaque par falsification de requête inter-sites, sea-surfing)

Qu'est-ce que c'est ?

Ce type d'attaque consiste effectuer une opération protégée en passant par un usager qui détient les droits requis pour effectuer cette opération. Ceci est fait à l'insu de cet usager.

Qu'est-ce qui rend cette attaque possible ?

Un des facteurs qui rendent possibles les attaques CSRF est le lancement d'une action à partir de paramètres dans l'URL (utilisation de $_GET).

Comment les utilisateurs malveillants font-ils ?

Les attaques CSRF sont souvent lancées à partir d'un lien envoyé à l'usager par courriel, par messagerie ou sur des réseaux sociaux. L'usager clique sur le lien en croyant qu'il mènera à un endroit légitime alors que le lien lance une action protégée pour laquelle il détient les droits requis.

Par exemple, un utilisateur malveillant enverra à un usager qui détient les droits de suppression un courriel l'invitant à cliquer sur un lien dont le libellé semble inoffensif (ex : « Pour plus d'information »). Ce lien mène en réalité vers la page de suppression du produit no 4 (ex : https://mondomaine.com/produits.php?action=delete&id=4). Puisque l'usager détient les droits de suppression, le produit no 4 sera effectivement supprimé. L'utilisateur malveillant aura donc réussi à effectuer une opération protégée (ici, supprimer le produit no 4) même s'il ne détient pas les droits requis.

Comment s'en protéger ?

Afin de protéger votre code contre les attaques CSRF, évitez si possible l'utilisation de requêtes GET pour effectuer des opérations sensibles. Dans le cas où vous avez vraiment besoin des requêtes GET, l'utilisation des nonces permet de mieux protéger le code contre les attaques CSRF.

Pour plus d'information

« Quelques exemples basiques d’attaque sur une application web ». BlogoErgoSum. http://www.blogoergosum.com/16638-quelques-exemples-basiques-dattaque-sur-une-application-web

« Welcome to the NetSPI SQL Injection Wiki! ». NetSPI SQL Injection Wiki. https://sqlwiki.netspi.com/

« Injection SQL ». Wikipédia. https://fr.wikipedia.org/wiki/Injection_SQL

« Cross-site scripting ». Wikipédia. https://fr.wikipedia.org/wiki/Cross-site_scripting

« Cross-Site Request Forgery ». Wikipédia. https://fr.wikipedia.org/wiki/Cross-Site_Request_Forgery

« OWASP Top 10 2013 - Les Dix Risques de Sécurité Applicatifs Web les Plus Critiques  ». OWASP. https://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013%20-%20French.pdf

« Plus de 10 outils pour tester la sécurité de votre site web ». Crazy WS. http://www.crazyws.fr/securite/plus-de-10-outils-pour-tester-la-securite-de-votre-site-web-IO8AX.html

« sqlmap - Automatic SQL injection and database takeover tool ». sqlmap. http://sqlmap.org/

« RingZer0 Team Online CTF ». RingZer0. https://ringzer0team.com/

« Welcome to the Skull Security Wiki! ». Skull Security. https://wiki.skullsecurity.org/index.php?title=Main_Page

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 27 février 2022
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre