WEB-d Développement Web

PHP, SQL, HTML5, CSS3, Javascript, Mootools, Référencement, SEO, CMS, e-commerce, Apache, Linux, Ubuntu, ...

Protection contre la falsification de requête intersite (Cross-Site Request Forgery CSRF)

Un attaquant souhaite supprimer (ou modifier, ou ajouter) des données sur le site http://mon_application_en_ligne.com. Pour ce faire, il s'arrange pour qu'un utilisateur valide (et donc authentifié) du site active l'url http://mon_application_en_ligne.com/utilisateurs.php?action=supprimer&id=3. Ceci est possible grâce à un lien classique, mais aussi grâce à une image insérée dans un e-mail ou grâce à un iframe par exemple. Comme il est authentifié, l'utilisateur va donc inconsciemment supprimer (ou modifier) des données de l'application en ligne...

La seule protection efficace contre cette attaque consiste à ajouter dans la requête une chaîne de contrôle, que l'attaquant ne peut pas prévoir (donc choisie au hasard). De plus, toutes les actions (ajouter, supprimer ou modifier des données) devraient avoir lieu grâce à un formulaire pour éviter que cette chaîne de contrôle n'apparaisse dans l'url.


session_start();

if(isset($_POST['submit'])){
    if($_POST['_csrf-check'] == $_SESSION['_csrf-check']){
        // Exécuter les actions requises...
    }
}

$_SESSION['_csrf-check'] = rand();
 

<form action="" method="post">
    <input type="text" name="title"/>
    <input type="hidden" name="_csrf-check" value="<?php echo $_SESSION['_csrf-check'] ?>"/>
    <button type="submit" name="submit">Sauver</button>
</form>
 

D'après le projet OWASP, la falsification de requête intersite est une des 10 principales vulnérabilités des applications web : Top 10 2010-A5-Cross-Site Request Forgery (CSRF)

En juillet 2011, une faille de ce type a été découvert sur le site laposte.net, et en 2010 c'était au tour de Twitter.

Articles similaires