Dino Geek, try to help you

How to protect a PHP form against CSRF attacks?


Les attaques CSRF (Cross-Site Request Forgery) sont l’un des problèmes de sécurité les plus courants que les développeurs de sites web doivent éviter. Une attaque CSRF oblige l’utilisateur authentifié d’une application web à exécuter des actions non désirées à l’insu de cet utilisateur. Lorsque cela se produit, il peut permettre à des attaquants de modifier des paramètres, des informations de compte, ou même d’effectuer des transactions financières au nom de l’utilisateur. Pour protéger un formulaire PHP contre les attaques CSRF, plusieurs mesures peuvent être mises en œuvre.

  1. 1. Utilisation de jetons CSRF

La méthode la plus couramment utilisée pour lutter contre les attaques CSRF est l’utilisation de jetons (tokens) CSRF. Voici comment les implémenter en PHP :

1. Génération et stockage du jeton CSRF :
- Lors de l’affichage du formulaire, générez un jeton CSRF unique pour chaque session utilisateur et stockez-le dans la session. \`\`\`php session\_start(); if (empty($_SESSION[‘csrf_token’])) { $_SESSION[‘csrf_token’] = bin2hex(random\_bytes(32)); } $csrf_token = $_SESSION[‘csrf\_token’]; \`\`\`

1. Inclusion du jeton CSRF dans le formulaire :
- Incluez ce jeton comme un champ caché dans votre formulaire HTML. \`\`\`html

CSRF lors de la soumission du formulaire :
- Lors de la réception de la soumission du formulaire, vérifiez que le jeton CSRF envoyé correspond à celui stocké dans la session. \`\`\`php session\_start(); if ($_SERVER[‘REQUEST_METHOD’] = 'POST') { if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] ! $_SESSION[‘csrf_token’]) { die(‘CSRF token validation failed’); } // Traitement du formulaire } \`\`\`

  1. 2. Validation d’origine ou de référent

Une autre méthode pour protéger les formulaires contre les attaques CSRF consiste à vérifier l’origine de la demande. Vous pouvez vérifier les en-têtes `Origin` ou `Referer` de la demande HTTP pour vous assurer qu’ils proviennent de votre domaine.

```
$valid_referer = “https://yourdomain.com/”;
$valid_origin = “https://yourdomain.com”;

if (!empty($_SERVER[‘HTTP_ORIGIN’]) && $_SERVER[‘HTTP_ORIGIN’] !== $valid_origin) { die(‘Invalid HTTP origin!’);
}

if (!empty($_SERVER[‘HTTP_REFERER’]) && strpos($_SERVER[‘HTTP_REFERER’], $valid_referer) !== 0) { die(‘Invalid HTTP referer!’);
}
```

  1. 3. Utiliser des bibliothèques de sécurité

Il existe plusieurs bibliothèques et frameworks qui incluent des mécanismes intégrés pour se protéger contre les attaques CSRF. Par exemple, Laravel inclut une protection CSRF par défaut.

- Laravel : Le framework Laravel utilise un middleware qui vérifie le jeton CSRF pour les requêtes POST, PUT, PATCH et DELETE. Le jeton est automatiquement inclus en tant que champ caché dans les modèles de formulaire générés par Blade.

\`\`\`php {{ csrf\_field() }} \`\`\`

- Symfony: Symfony intègre également une validation de token CSRF à l’aide de sa composante `Form`.

  1. Conclusion

Protéger un formulaire PHP contre les attaques CSRF est crucial pour maintenir la sécurité de l’application web et la protection des utilisateurs. Les méthodes sont multiples et incluent l’utilisation de jetons CSRF, la validation de l’origine ou du référent, et l’exploitation de bibliothèques de sécurité. Chaque méthode a ses avantages et peut être combinée pour assurer une protection robuste.

  1. Sources

- OWASP, “Cross-Site Request Forgery (CSRF)“
- PHP.net, “Sessions“
- Laravel Documentation, “CSRF Protection“
- Symfony Documentation, “Forms“

Ces exemples montrent les meilleures pratiques pour sécuriser les formulaires PHP contre les attaques CSRF en utilisant des solutions éprouvées et recommandées.


Simply generate articles to optimize your SEO
Simply generate articles to optimize your SEO





DinoGeek offers simple articles on complex technologies

Would you like to be quoted in this article? It's very simple, contact us at dino@eiki.fr

CSS | NodeJS | DNS | DMARC | MAPI | NNTP | htaccess | PHP | HTTPS | Drupal | WEB3 | LLM | Wordpress | TLD | Domain name | IMAP | TCP | NFT | MariaDB | FTP | Zigbee | NMAP | SNMP | SEO | E-Mail | LXC | HTTP | MangoDB | SFTP | RAG | SSH | HTML | ChatGPT API | OSPF | JavaScript | Docker | OpenVZ | ChatGPT | VPS | ZIMBRA | SPF | UDP | Joomla | IPV6 | BGP | Django | Reactjs | DKIM | VMWare | RSYNC | Python | TFTP | Webdav | FAAS | Apache | IPV4 | LDAP | POP3 | SMTP

| Whispers of love (API) | Déclaration d'Amour |






Legal Notice / General Conditions of Use