Framework

Sécurisation des variables entrantes

Table des matières

Généralités sur la sécurité



Il est vrai que la sécurité est devenue un critère très important dans le développement d'applications internet. Les conséquences d'une attaque peuvent êtres plus ou moins graves. Quoi qu'il en soit sur PHPBoost il n'est pas question de laisser un utilisateur détruire le contenu de votre site, accéder à vos données ou encore prendre le contrôle de votre site à votre place.
On entend parfois dire « PHP n'est pas sécurisé », et pourtant une très large majorité des failles présentes sur le web ne sont pas dues à PHP mais plutôt à l'imprudence des programmeurs. Les failles de sécurité sont présentes principalement sur les variables qui entrent dans les scripts. C'est pourquoi nous avons mis en place des fonctions de sécurisation des variables entrantes. Celles-ci sont simples à utiliser, nous allons voir leur fonctionnement en détails.

Fonctions



Nous allons voir comment sécuriser des variables entrantes, que ce soit de type $_POST, $_GET, $_COOKIE ou autres. Il est important de rappeler que l'utilisateur peut envoyer ce qu'il veut, et que ces variables peuvent donc contenir des portions de code SQL destinées à faire par exemple des injections SQL, ce qui peut vous détruire votre base de données.

Pour remédier à cela vous devrez sécuriser toutes les variables entrantes. Voici une liste de fonctions qui le permettent. Il est indispensable de déclarer chaque variable utilisée (bien que PHP ne l'exige pas), c'est une règle qui est respectée dans chaque script de PHPBoost, nous allons voir dans les différents exemples comment faire. Il est recommandé d'initialiser toutes les variables en début de script.

Sécurisation de nombres



Voici la syntaxe à utiliser pour sécuriser des nombres entrant par des variables de type $_GET ou $_POST. Supposons qu'une variable id qui doit être une entier rentre par argument dans l'url, elle s'appelle donc $_GET['id']. La variable float quant à elle rentre par un formulaire et représente un nombre décimal. Voilà comment procéder pour les sécuriser et être sur qu'elles ne contiennent seulement des nombres (entier par défaut, flottant si on rajoute en deuxième argument true). A noter qu'on initialise par défaut les variables qui contiennent des nombres à 0.
Code :
<?php
$id 
= !empty($_GET['id']) ? numeric($_GET['id']) : 0
$float = !empty($_POST['float']) ? numeric($_POST['float'], true) : 0;
?>


Ainsi vous n'utiliserez plus $_GET['id'] mais $id (vous pouvez l'appeler comme vous voulez, ce n'est qu'un exemple), toutes les menaces potentielles sont écartées par ces fonctions et vous pouvez donc les utiliser librement, notamment dans les requêtes dans la base de données où les risques encourus sont les plus importants.

Sécurisation des chaînes de caractères



De la même façon que pour les entiers les chaînes de caractères sont potentiellement dangereuses si on ne fait pas attention à ce qu'elles contiennent (notamment pour les requêtes dans la base de données). Là encore des fonctions prennent en charge la sécurisation des variables, nous allons voir comment les utiliser.
Code :
<?php
$title 
= !empty($_POST['title']) ? securit($_POST['title']) : '';
?>


Il s'agit exactement du même principe que pour les entiers, ici on utilise la fonction sécurit et on initialise à une chaîne vide pour conserver le type string. A noter que si on ne veut pas transformer le html en entités il faut passer en deuxième argument la constante HTML_UNPROTECT. Voici un exemple.
Code :
<?php
$title 
= !empty($_POST['title']) ? securit($_POST['title'], HTML_UNPROTECT) : ''
?>
Cette page a été vue 2053 fois