Aller au contenu
gaetancottrez.dev

Apprenez comment sécuriser correctement vos formulaires en PHP

Published:le  à 20:25 | (5 min de lecture)
Apprenez comment sécuriser correctement vos formulaires en PHP

Table des matières

Ouvrir table des matières

La sécurité des formulaires en PHP

Une chose primordiale lorsqu’on se lance dans le développement web. On est souvent amener à en créer pour diverses raisons que ce soit sur une application ou un site web. La sécurité d’un formulaire est d’autant plus importante surtout lorsque celui-ci est accessible au public pour des utilisateurs lambda. Malheureusement dans les utilisateurs lambda, il y a des utilisateurs malveillants et vous devez absolument sécuriser vos formulaires.

La sécurité dans le traitement PHP est obligatoire

C’est la partie sécurité obligatoire et la plus importante de toute. Bien souvent, un jeune développeur prendra l’habitude de sécuriser son formulaire au niveau JavaScript (client) et négligera la partie PHP (serveur). Rappelez-vous bien que le dernier traitement de votre formulaire c’est le PHP qui le fera et non le JavaScript. Le JavaScript ne sert qu’à améliorer l’ergonomie des utilisateurs et l’intuitivité de vos formulaires. Vous devez absolument privilégier cette partie et ne jamais la négliger.

Pour savoir comment sécuriser un formulaire, il faut d’abord connaître les failles de sécurité et comment les exploiter bien évidemment, ce qui n’est pas toujours évident de les connaître quand on est débutant.

La faille XSS

La faille XSS, aussi appelé « Cross-Site Scripting », permet d’injecter du code directement dans une page par l’URL, en POST, en GET et bien évidemment par l’intermédiaire d’un formulaire. Le plus souvent, cette faille est utilisée dans l’optique de capturée les cookies d’identification des utilisateurs sur un site Internet. Les failles de ce type, qui se cachent souvent dans les actions les plus simples, ne doivent surtout pas être négligées.

Imaginons que nous avons un formulaire de connexion très simple :

<form method="post" action="connexion.php">
  <input type="text" name="pseudo" />
  <input type="password" name="password" />
  <input type="submit" value="Connexion" />
</form>

Et que ce formulaire affiche sur la page de connexion ceux-ci :

<?php
    echo "Ravi de vous revoir ".$_POST['pseudo']." !"
?>

Si votre formulaire n’est pas sécurisé pour afficher les données soumises par l’utilisateur, alors rien n’empêche personne de mettre de ce qu’il veut dans vos champs. Comme par exemple ceux-ci :

<script>
  alert('C'est une faille XSS qu'on a là')
</script>

Et ce script s’éxecutera dans votre navigateur. Testez ici 🔗.

Je vous laisse imaginer ce qu’il est alors possible de faire dans ce genre de cas. Un simple strip_tags permet de pallier à ce problème :

<?php
echo "Ravi de vous revoir ".strip_tags($_POST['pseudo'])." !"
?>

L’injection SQL

J’ai effectué un article à ce sujet que vous trouverez ici. Les injections SQL n’auront plus de secret pour vous. Il est très important dans vos développements de faire vos requêtes SQL en des requêtes préparées via PDO en PHP. Ce système de requête préparée est très puissant puisqu’il se charge de faire le nettoyage contre les injections SQL à votre place. Vous serez donc obligé de passer en orientée objet puisque PDO est un objet.

cURL

Un bon moyen de se rendre compte que la sécurité côté traitement (PHP) est la plus importante que côté client (JavaScript) c’est de comprendre et maîtriser le cURL. cURL 🔗 est une librairie permettant de faire des requêtes URL aux client tout cela en ligne de commande. C’est un mécanisme très puissant puisque cela vous permet de récupérer le contenu d’une page web, d’envoyer des fichiers, de s’authentifier et donc bien évidemment de soumettre des données dans un formulaire HTML. En effet, il est tout à fait possible de soumettre un formulaire sans y accéder par un navigateur où plutôt soumettre des données sur l’action du formulaire. Cela s’applique également pour les formulaires en Ajax qui contiennent une URL.

cURL peut être utilisé dans des objectifs sains comme l’utilisation d’API REST 🔗 ou bien de façon néfaste comme pirater un site Internet en contournant les sécurités mis en place côté client.

Si on reprend le formulaire précédent et qu’on veut le soumettre en cURL, voilà le code à produire :

$lien = 'http://www.deviotyourself.com/exemples/securiser-vos-formulaires/xss/connexion.php';
$postfields = array(
'pseudo' => 'test',
'password' => 'test',
);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $lien);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);

$return = curl_exec($curl);
curl_close($curl);

echo 'Retour cURL : '.$return;

Testez ici 🔗.

Ce script est l’équivalent de se rendre sur le formulaire, de remplir ses champs et le soumettre pour arriver au même résultat. Il est alors possible de pouvoir créer des scripts pour se connecter via des identifiants sur un site Internet et ainsi de récupérer son contenu par exemple. Vous avez peut être également remarqué, j’ai soumis les données sur la page de traitement contournant ainsi toute la sécurité client que j’aurais pu mettre sur le formulaire. Cela veut aussi dire qu’on peut soumettre le formulaire autant de fois que l’on veut avec un tel script en y ajoutant une boucle et il serait alors judicieux de le protéger avec un captcha par exemple.

Conclusion

Le but de l’article était de vous montrer que la sécurité de vos formulaires web n’est pas à prendre à la légère puisqu’il est très facile de contourner la sécurité d’un formulaire côté client.

Vous pourriez aussi aimer

Github Copilot : Mon avis après 2 mois d'utilisation

Github Copilot : Mon avis après 2 mois d'utilisation

Comment être productif en programmation ?

Comment être productif en programmation ?

Article précédent
Découvrez les dangers des injections SQL