Menu

Protéger son application web des injections Javascript et SQL

Cet article sera amélioré si de nouveaux types d'injections apparaissent ou s’il y a eu des oublis.


Comprendre l'injection


Une injection peut se faire de différentes manières

  • Dans les paramètres d'un GET
  • Dans les paramètres d'un POST
  • Dans un éditeur de texte Javascript
  • Et bien d'autres...


Le but étant d'injecter un bout de code qui permettrait à l'attaquant d'obtenir certaines informations et/ou accès qu'il ne devrait pas censé avoir dans le bon fonctionnement de votre application.


Exemple concret


Vous permettez aux utilisateurs de votre application de créer un article qui apparaîtra sur votre site web.

Pour ce faire, vous faites un formulaire avec un champ pour le titre et un champ pour le contenu de l'article.

Pour permettre aux utilisateurs d'avoir une certaine liberté sur le contenu de l'article, vous décidez d'utiliser un éditeur de code Javascript tel que Summernote.

Côté serveur PHP, vous ne pourrez donc pas utiliser une fonction telle que htmlentities() pour encoder les caractères spéciaux étant donné que quand vous allez le décoder sur votre site web, vous obtiendrez un mauvais affichage du contenu de votre article.

Cette faille laisse donc place aux injections et une personne malveillante pourrait très bien venir injecter un script Javascript dans le Summernote depuis l'inspecteur d'élément.

Le script pourrait être enregistré en base de données et serait appliqué à chaque fois qu'un utilisateur visiterait l'article en question.


Solution


Si nous ne pouvons pas utiliser certaines fonctions telles que htmlentities(), qui causeront un défaut d'affichage, php nous met à disposition des filtres de nettoyage qui n'encode pas les caractères spéciaux mais qui supprime les tentatives d'injections Javascript et PHP.

Le filtre en question est le FILTER_UNSAFE_RAW .

Pour l'utiliser, il suffit de récupérer le contenu de votre paramètre depuis le côté serveur PHP et de le filtrer avant de l'enregistrer en base de données.


$summernoteSafe = filter_var($_POST['content'], FILTER_UNSAFE_RAW);


Catégorie :
PHP
Vues :
285