Bases de Sécurité

La sécurité informatique est un enjeu majeur dans le monde de l’entreprise. Trois objectifs principaux s’en dégagent. Il faut tout d’abord s’assurer de l’intégrité des données, elles ne doivent pas être altérées. De plus, il est essentiel d’en garantir la disponibilité dans le cadre prévu. Et enfin il faut évidemment veiller à la confidentialité des données. Il est également possible d’ajouter trois autres objectifs que sont la traçabilité de la donnée ce qui signifie concrètement que l’accès ou la tentative d’accès à la donnée est conservé. Il y a aussi l’authentification qui permet la gestion des droits d’accès utilisateur. Et enfin la non-répudiation  dans le sens où chacun est responsable de ses actions et qu’aucun tiers ne doit être en mesure de s’en attribuer la paternité.

Partant de ce constat, il existe énormément de failles de sécurité. Ici nous nous focaliserons davantage sur le domaine du Web. Le but de cet article n’est pas d’en faire une liste exhaustive mais simplement de s’intéresser à une poignée d’entre elles en les définissant de façon générale et par l’exemple pour finir sur quelques bonnes pratiques Php à adopter.

* * *

La première faille évoquée tourne autour des systèmes trop verbeux. Cela peut impacter différentes parties du site. Par exemple, un niveau de log trop élevé sur un serveur de production est une mine d’information très précieuse pour un attaquant. Les logs permettent de glâner des informations cruciales sur le fonctionnement intrinsèque d’un site qui peuvent être relatives à l’administration des utilisateurs, à la base de donnée, au serveur DNS, etc. Dans ce cas, il est simplement important de vérifier les informations qui sont communiquées via votre site ou au niveau des machines impliquées dans le fonctionnement du site.

*

    Focalisons nous à présent sur deux failles très connues : les injections SQL et les attaques XSS.

Le principe d’une attaque est de pouvoir exécuter du code malicieux sur la machine de quelqu’un d’autre. Concernant les injections SQL, le but est d’accéder, altérer ou détruire les données de la base de données. Le moyen d’y parvenir est d’écrire du code SQL dans un champs d’une page web. En guise d’exemple, nous pouvons prendre le cas simple d’un formulaire de connexion.

 

<form method="post" action="..." name=”logInForm”>
    <fieldset>
        <label for="login">Log in:</label><input name="login" type="text" id="login" />
        <label for="password">Password:</label><input type="password" name="password" id="password" />
    </fieldset>
    <input type="submit" value="Connexion" />
</form>
HTML - Formulaire de connexion simplifié

Imaginons que dans la base de donnée, il y ait une table USER spécifiant tous les utilisateurs enregistrés sur le site. La requête permet de récupérer les données spécifiques à l’utilisateur lorsqu'il se connecte :

SELECT * FROM User WHERE Login=”loginValue” AND Password=”passwordValue”;
SQL - Requête récupération données utilisateur

En renseignant par exemple, loginValue et password à “ or “”=”. Ainsi il est possible de récupérer toutes les valeurs de la table USER. Dans cet exemple, il s’agit de consulter des données mais il est également possible de les altérer. En effet, le batched SQL est supporté par quasiment la totalité des bases de données. Dans notre exemple, il serait tout à fait envisageable d’ajouter d’autre requête à la suite et ainsi opérer directement sur la base de données. Pour pallier à ce genre de problème, il est, par exemple, possible de construire des requêtes préparées.

 

$statement = $db→prepare(‘SELECT * FROM User WHERE Login=”:loginValue” AND Password=”:passwordValue”’);
$statement → bindParam(‘:loginValue’, $loginValue);
$statement → bindParam(‘:passwordValue’, $passwordValue);
$statement→execute();
PHP - Requête préparée

Cela permet de déléguer au connecteur de base de données, l’échappement des caractères spéciaux ainsi que la vérification des mots réservés.

*

    L’attaque XSS (Cross-Site Scripting) consiste à injecter du contenu malicieux dans une page et de provoquer des actions sur le navigateur du visiteur. Il y a une multitude de possibilités différentes pour opérer une attaque XSS. Le but peut être de rediriger l’utilisateur, de lui voler des informations comme sa session ou ses cookies et ainsi de réaliser des actions en son nom ou encore d’empêcher le chargement complet d’une page via une boucle infinie par exemple.

Il existe différents types de failles XSS :

  • réfléchie : elle est dite non permanente car elle n’est pas enregistrée. Des données envoyées par le navigateur client sont injectées dans des variables mal protégées et retransmises au navigateur,
  • stockée : elle est quant à elle conservée en base de données ou sur un fichier. Elle sera donc exécutée à chaque chargement. Des données envoyées par l’utilisateur sont sauvegardées côté serveur et ré-affichées telles quelles.

Voici deux cas d’école qui illustrent ces failles XSS :

<form method=”post” action=”...”>
    <input type=”text” name=”login”/>
    <input type=”submit” value=”Connect”/>
</form>
HTML - Formulaire de login simplifié
<?php echo “Hi, “ . $_POST[‘pseudo’].” !” ?>
PHP - Affichage de la donnée postée

Ici, il est par exemple possible d’insérer du JS dans le but de faire remonter une pop-up.

<script>alert(‘Illustration d’une faille XSS réfléchi’)</script>
JS - Injection script

Suivant le même principe, imaginons le même système où cette fois-ci les données renseignées par l’utilisateur sont sauvegardées.

<form method=”post” action=”...”>
    <input type=”text” name=”comment”/>
    <input type=”submit” value=”Submit”/>
</form>
HTML - Formulaire soumission commentaire

Il pourrait simplement y sauvegarder du code HTML pour changer le style du commentaire.

Pour pallier à ce genre de faille, il est possible d’utiliser la fonction htmlspecialchars filtre les ‘<>’ ou encore htmlentities qui échappe les caractères spéciaux en Php. Toujours est-il qu'il est primordial de toujours traiter les données reçues. D’ordre général, il faut toujours considérer l'utilisateur comme étant mal intentionné.

* * *

    De nos jours, de plus en plus de frameworks accordent de l’importance à la sécurité notamment Symfony qui a mis en place un générateur de formulaire performant et sécurisé. Il existe également des outils permettant de tester la vulnérabilité d’une machine tel que Metasploit qui est un projet open-source complétement réécrit en Ruby exploitant les failles existantes ou encore Netsparker qui se présente comme une application Windows permettant de faire un scan d’applications Web. De plus, il est aussi possible de faire appel à des entreprises spécialisées dans les audits de sécurité qui peuvent poser un diagonistic et corriger les failles de sécurité levées moyennant rémunération. Une dernière remarque concernant la sécurité est de toujours mettre à jour les logiciels utilisés. En effet, des failles et des parades sont régulièrement découvertes.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.