23
En finir (presque) avec les failles de sécurité de PHP
La sécurité des données est souvent considérée au départ de la conception puis vite sous estimée par les développeurs et même par les clients – il faut y consacrer du temps…
Depuis PHP 5.2.0, l’assainissement et la validation des données sont nettement facilités avec l’introduction de filtrage des données.
L’utilisation de PHP sur le web a réellement été boostée avec les logiciels open source comme WordPress, Drupal et Magento ainsi que des applications Web comme Facebook.
Les possibilités d’intrusion et d’insécurité pour les données augmentent d’autant plus que les applications où est employé PHP sont variées: sites web dynamiques, applications riche et métier, plates-formes de blogs, systèmes de gestion de contenu et commerce électronique – qui reste un sous-ensemble des autres sur le plan technique.
Il est donc indispensable d’assimiler les méthodes de propreté avec PHP, d’autant que ce nettoyage est grandement facilité avec les dernières versions de PHP. Aussi, avec quelques bonnes pratiques et un peu de qualité il est aisé de se protéger des attaques.
Pour rappel (ou pas), voici les menaces les plus connues (pour les solutions voir la doc et les liens plus bas) :
- Cross-Site Scripting (XSS) : la vulnérabilité la plus courante et pourtant la plus simple à prévenir. Le principe est de s’introduire dans un site à partir d’un autre pour déposer et exécuter un code malveillant.
Un exemple très récent et marquant de cette technique est l’attaque de StalkDaily.com par le ver Mikeyy Twitter qui lançait du javascript via des interfaces Twitter infectées.
Encore une fois les précautions à prendre avec le filtrage de données – celles passées par les URLs en l’occurrence – restent simples.
- SQL Injection : Il s’agit d’injecter du code en insérant du script dans le programme initial et de le dévier. Par exemple en passant par un champ de recherche mal protégé, il est possible de casser la requête de recherche pour dévier l’objectif du programme et d’accéder à la base de données – et donc de lire ou de modifier le mot de passe administrateur etc. Là encore, les précautions sont aussi simples qu’efficaces.
- Cross-Site Request Forgery (CSRF/XSRF) : va permettre à un utilisateur d’activer des actions pour lesquelles il n’a pas les droits. Par exemple, en déposant une image sur un forum qui contient en fait un script, lorsque l’administrateur, disposant de tous les droits va lire cette image, des codes malicieux vont s’exécuter – suppression etc.
Pour résumer, les sites sensibles au CSRF sont ceux qui acceptent les actions sur le simple fait de l’authentification à un instant donné de l’utilisateur et non sur une autorisation explicite de l’utilisateur pour une action donnée.
- Il existe une variante de l’attaque précédente qui s’applique aux Cookies plutôt qu’aux sessions : le Cross Site Cooking. Les méthodes pour s’en prévenir sont les mêmes.
- Données « inappropriées » : ce n’est pas vraiment une faille, mais c’est une vulnérabilité en ce sens que l’accumulation de mauvaises données peut faire planter un site – hébergement, base de données, affichage. Par exemple, sur MySpace (c’est dire…) il est possible d’altérer le profil utilisateur en modifiant l’affichage par l’insertion d’hacks CSS et HTML…

La doc PHP nous dit qu’il existe deux sortes de filtre : la validation et le nettoyage.
La Validation sert à vérifier si une donnée passe certains critères. Par exemple, passer les critères de FILTER_VALIDATE_EMAIL va déterminer si une donnée est une adresse courriel valide, mais ne va pas modifier la données elle-même.
Le nettoyage va nettoyer les données, par exemple en retirant les caractères indésirables. Par exemple, passer une donnée à FILTER_SANITIZE_EMAIL va faire disparaître les caractères inappropriés dans une adresse courriel. D’un autre coté, la donnée n’est pas validée.
Des options sont éventuellement utilisées par la validation et le nettoyage, pour adapter leur comportement à des besoins spécifiques. Par exemple, avec l’option FILTER_FLAG_SCHEME_REQUIRED pour filter une URL, il faut indiquer le protocole utilisée (tel que http://).
Pour les sources et les différentes techniques c’est ici :
[+] – La documentation PHP – what else?…
[+] – Listing et applications des filtres
[+] – Tutoriaux et démonstrations
Un commentaire ?
Récemment
- En pause, le temps d’un tour du monde !
- La machine à courber le fil de fer la plus rapide du monde…
- Plus besoin de ceinture avec la fenêtre Toyota
- Chic chiotte
- Accro Cat Smoke Killer
- Bohemian Rhapsody au ukulélé
- Trans Gothique Harry Potter Pole Dance!
- Le chat poucé
- Radiation : le sievert expliqué (ou pas)
- Surveiller la radioactivité avec l’IRSN
- Flashmob pollution
- ROI et Facebook : 10 méthodes et stratégies marketing
Commentaires récents
- vente-privee dans CMS jungle : Drupal, Joomla, EzPublish, Typo3, WordPress… WTF ??
- frossfross dans CMS jungle : Drupal, Joomla, EzPublish, Typo3, WordPress… WTF ??
- Réseaux sociaux by gauthiersophie - Pearltrees dans tinEye : la recherche par image
- iPhone 5 dans I Robot
- informatique Grenoble dans Phantom of the Floppera
- informatique grenoble dans Green IT : contrôle énergétique et informatique durable.
- Green IT dans Green IT : contrôle énergétique et informatique durable.
- Macrocreation Corp. dans CMS jungle : Drupal, Joomla, EzPublish, Typo3, WordPress… WTF ??
Catégories
- Accessibilité
- Ajax
- Architecture
- Astronomie
- BDD
- Conception
- Conférence
- CSS
- Design
- e-commerce
- Ergonomie
- Gestion de projet
- Green IT
- Hardware
- Imagerie
- Insolite
- Internet
- Javascript
- Jeux vidéos
- KM / APML
- Langage
- Livres
- Mobile
- Musique
- Outils
- Photographie
- PHP
- Production
- Reasonable Geek
- Réseau social
- RIA / RDA / RMA
- Texte
- Vidéo
- Webdesign
- Webmarketing
- Wishlist
- XHTML


