

Contrairement aux attaques XSS qui cherchent à dérober des informations personnelles, les attaques CSRF, pour Cross Site Request Forgery, cherchent à faire exécuter des actions à l'insu de l'utilisateur. Le terme CSRF pourrait être traduit par "Requêtes Inter-site".
Mais bon à quoi ça ressemble concrètement ?
L'attaquant va chercher à ce qu'un administrateur de votre site (une fois connecté à votre back office) lance la page souhaitée, par exemple https://www.votre-site.fr/admin/index.php?action=tout-supprimer
.
Cet appel peut être masqué simplement à l'intérieur d'une page d'un site tiers déjà infecté :
<div style="display:none;">
<img src="https://www.votre-site.fr/admin/index.php?action=tout-supprimer" />
</div>
Alors comment se protéger contre les CSRF ?
Il n'existe pas de technique parfaitement fiable pour vous protéger des CSRF mais on peut rendre les attaques plus complexes à faire. Une première option est de vérifier le referer c'est-à-dire vérifier que vos pages soient lancées uniquement depuis une provenance dont le nom de domaine est connu et maitrisé par vous. Une deuxième option est d'ajouter un système de jeton.
<?php
// On lance la session
session_start();
// On génère un numéro de jeton aléatoire
$jeton = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
// On enregistre le jeton en session
$_SESSION['jeton'] = $jeton;
// On affiche notre formulaire avec le jeton en champ caché
echo '<form>
<input type="hidden" name="jeton" value="' . $jeton . '" />
<input type="submit" value="Valider" />
</form>';
?>
Ensuite une fois le formulaire posté, on compare le jeton envoyé et le jeton sauvegardé en session.
Si les deux jetons sont identiques, on peut effectuer l'action importante :
<?php
// On lance la session
session_start();
// On compare nos deux jetons
if (!empty($_SESSION['jeton']) AND !empty($_POST['jeton']) AND ($_SESSION['token'] == $_POST['token']))
{
// Vérification terminée
// On peut effectuer l'action importante
}
else
{
echo "Erreur de vérification des jetons";
}
?>
Il existe ensuite bien d'autres techniques de protection qui peuvent être ajoutées :
- Ajouter un captcha
- Utiliser un système de saisie de numéro avec la souris comme sur les systèmes d'identification bancaire
- Redemander la saisie du mot de passe
- Un code par SMS

Par Thibaut Pietri
Derniers articles

Les risques de sécurité liés aux métadonnées des photos
14 août 2019 En photographie numérique, les métadonnées sont stockées à l'intérieur d'un fichier JPG et permettent de décrire un certain nombre d'informations complémentaires. Ces métadonnées représentent un risque de sécurité.

Comment vérifier si votre site internet a été piraté ou infecté ?
9 août 2019 Le piratage d'un site web peut parfois ne pas être visible directement avec un navigateur web. En effet le piratage peut avoir des objectifs variés. Certains ont tout intérêt à rester invisible.

L'authentification à facteurs multiples pour protéger votre site web
7 août 2019 L'authentification à facteurs multiples est un système de sécurité combinant au moins deux modes d'identification différents. Explications.