Вы находитесь на странице: 1из 20

Scurit dun site PHP

Lundi 7 juin 2010


Jean-Ferdinand Susini

7 juin 2010

Les impratifs de scurit


Un programme php est une application distribue qui
pose trs tt le problme de la scurit. On peut la
dfinir par trois proprits non fonctionnelles :
Lapplication manipule-t-elle des donnes fiables
(intgrit)
Lapplication interagit-elle avec les bons
interlocuteurs (authentification)
Le secret des donnes changes est-il prserv
(confidentialit)

7 juin 2010

Les impratifs de scurit


Un programme php est une application distribue qui
pose trs tt le problme de la scurit. On peut la
dfinir par trois proprits non fonctionnelles :
Lapplication manipule-t-elle des donnes fiables
(intgrit)
des donnes changes, des programmes excuts
Lapplication interagit-elle avec les bons
interlocuteurs (authentification)
Le secret des donnes changes est-il prserv
(confidentialit)

7 juin 2010

Les impratifs de scurit


Un programme php est une application distribue qui
pose trs tt le problme de la scurit. On peut la
dfinir par trois proprits non fonctionnelles :
Lapplication manipule-t-elle des donnes fiables
(intgrit)
des donnes changes, des programmes excuts
Lapplication interagit-elle avec les bons
interlocuteurs (authentification)
de qui par rapport qui ? (pb du rejeu)
Le secret des donnes changes est-il prserv
(confidentialit)

7 juin 2010

Les impratifs de scurit


Un programme php est une application distribue qui
pose trs tt le problme de la scurit. On peut la
dfinir par trois proprits non fonctionnelles :
Lapplication manipule-t-elle des donnes fiables
(intgrit)
des donnes changes, des programmes excuts
Lapplication interagit-elle avec les bons
interlocuteurs (authentification)
de qui par rapport qui ? (pb du rejeu)
Le secret des donnes changes est-il prserv
(confidentialit)
par rapport qui ?

7 juin 2010

Les impratifs de scurit


Un quilibre trouver :
entre le cot du dveloppement de programmes
ayant des proprits de scurit satisfaisantes et la
valeur intrinsque des donnes ainsi que la
maintenance de lapplication ou des serveurs
entre la souplesse dutilisation et les contraintes
induites sur lutilisation de lapplication des mesures
de scurit
Intgrer le plus tt possible ces contraintes dans la
conception de lapplication pour en apprhender les
cots

7 juin 2010

Les attaques
Considrer que lapplication distribue sexcute dans un
monde hostile :
Empcher les droulement correcte de lapplication par
brouillage des donnes
Dsorganiser les changes et le fonctionnement de
lapplication
Usurper lidentit dun interlocuteur pour utiliser
lapplication pour soi et/ou rcuprer des donnes
confidentielles
Prendre le contrle partiel ou complet du systme plus
ou moins discrtement

7 juin 2010

Mesures de scurit
Angle dattaque du problme de la scurit :
Fiabiliser les donnes et le logiciel
Fiabiliser les changes et en particulier le traitement des
formulaires
Scuriser laccs au bases de donnes
Gestion scurise des sessions
Gestion des serveurs partags

7 juin 2010

Register Globals
Cette directive permet dappliquer la valeur dun paramtre
de requte directement dans une variable globale de mme
nom. Cela vite le recourt aux super globales $_GET ou
$_POST
Lemploie de cette directive est largement dconseill. Bien
que trs pratique elle prsente un haut risque dinterfrence
aisment exploitable par un attaquant
Cette faille met en vidence la ncessit pour le
programmeur de toujours explicitement initialiser toutes ses
variables avant de les utiliser, mme si une initialisation est
suppose

7 juin 2010

Vrifier et filtrer les donnes


PHP nest pas un langage fortement typ ce qui engendre
des risques bien plus importants
Il faut donc vrifier que les donnes reues sont lgitimes
Les donnes doivent tre contrles et ces contrles
doivent-tre incontournables

7 juin 2010

Vrifier et filtrer les donnes


PHP nest pas un langage fortement typ ce qui engendre
des risques bien plus importants
Il faut donc vrifier que les donnes reues sont lgitimes
Les donnes doivent tre contrles et ces contrles
doivent-tre incontournables

Concentr dans un point de passage unique matris

7 juin 2010

Vrifier et filtrer les donnes


PHP nest pas un langage fortement typ ce qui engendre
des risques bien plus importants
Il faut donc vrifier que les donnes reues sont lgitimes
Les donnes doivent tre contrles et ces contrles
doivent-tre incontournables

Concentr dans un point de passage unique matris


un point dente unique

7 juin 2010

Vrifier et filtrer les donnes


PHP nest pas un langage fortement typ ce qui engendre
des risques bien plus importants
Il faut donc vrifier que les donnes reues sont lgitimes
Les donnes doivent tre contrles et ces contrles
doivent-tre incontournables

Concentr dans un point de passage unique matris


un point dente unique
un module unique appliqu systmatiquement tous les
points dentr

7 juin 2010

Vrifier et filtrer les donnes


Vrification du type des donnes par des programmes
gnriques extrayant les donnes des variables super
globales
Initialisation des variables au dmarrage du script
Configuration soigne de la gestion des erreurs (php.ini) :
error_reporting : E_ALL pour dtecter les variables non
initialises
display_errors : a utiliser systmatiquement en phase de
dveloppement et masquer en production
log_errors/error_log: pour avoir des retours en
production

7 juin 2010

Vulnrabilit XSS
Les Cross-site scripting exploitent des vulnrabilit
mettant en uvre des informations partages par des sites
diffrents : des sites affichant des donnes externes
Si les donnes affiches ne sont pas correctement filtres
elle peuvent contenir des codes malicieux qui sexcuteront
sur le client
Contre-mesures : utilisation des fonctions de filtrage (ne pas
rinventer la roue) : htmlentities, htmlspecialchars,
objectif : filtrer les donner pour empcher linterprtation de
contenu html ou javascript.

7 juin 2010

Construire de fausses requtes


Les dangers de lutilisation de la mthode GET :
Le requte engendr par la balise :
<img src="http://monsitephp.fr/action.php?
task=delete&num=100" />

ne peut tre distingu du ct du serveur de la requte


engendre par lutilisation du formulaire :
<form action="/action.php">
<select name="task">
<option value="delete">delete</option>
<option value="view">view</option></select>
<input type="text" name="num"/>
</form>

7 juin 2010

Vulnrabilits CSRF
Consiste forger de fausses requtes partir dURL
authentifies et de pousser le client excuter des actions
sans le savoir.
Pour fonctionner, il faut que lauthentification ait t
ralise et que laction du formulaire ne demande pas
d'authentification ou de confirmation
On forge alors la requte en dissimulant un formulaire ou
en utilisant une balise image contrl par exemple par du
JavaScript

7 juin 2010

un formulaire, un traitement
Il faut sassurer quune demande de traitement est bien
issue dun formulaire gr par lapplication
Utilisation de mcanisme cryptographique pour identifier
les formulaires utiliss avec un numro unique
$token = uniqid(rand(),true);

et ajouter un champ invisible au formulaire :


<input type="hidden" name="token" value="<?php
echo $token; ?>" />

ne pas oublier de stocker (dans une session, dans une base


de donnes ou dans un fichier le tocken)

7 juin 2010

Injection SQL
Lorsque lon construit une requte SQL directement partir
des champs dune requte POST ou GET, on fournit un
attaquant la possibilit de pratiquer de linjection de code
malicieux
<?php
$sql = "INSERT INTO users
(reg_username,reg_password,reg_email)
VALUES ('{$_POST['reg_username']}',
'$reg_password', '{$_POST['reg_email']}')";
?>

par exemple en entrant dans le champ utilisateur :


bad_guy', 'mypass', ''), ('good_guy

utilisation de filtres : mysql_real_escape_string, ...

7 juin 2010

Le vol de session
start_session dmarre une session mais cest votre code
PHP de vrifier si la session existe dj ou pas. Un
attaquant malveillant peut fixer un identifiant de session si
vous ne le vrifiez pas
Rajout dinformation qui assurent que lon reoit bien des
requtes de la mme session
Utilisation didentificateurs non prdictibles
Utilisation de linteractions utilisateur pour veiller
lattention sur quelque chose de suspect

Вам также может понравиться