Cette faille de sécurité n'est pas nouvelle en soit, mais il est parfois bon de faire un petit rappel. De manière générale, ne faites jamais confiance aux variables $_SERVER
, $_COOKIE
, mais aussi, $_GET
, $_POST
, $_REQUEST
, $_FILES
...
Exemple de faille avec <?php echo $_SERVER['PHP_SELF']; ?>
dans la page php suivante :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>$_SERVER['PHP_SELF']</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" action="post"> <fieldset> <legend>Ma FORM</legend> <p><input type="submit"></p> </fieldset> </form> </body> </html>
Si vous appelez la page ci-dessus avec le lien suivant :
http://www.monsite.com/page.php/"><script>alert('Injection!');</script>
vous verrez une belle fenêtre de dialogue Javascript "Injection!" ...
Pour remédier à cette faille de sécurité, pensez à toujours sécuriser vos variables avec une fonction du type htmlentities()
.