SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
La sécurité et PHP
Christophe Villeneuve
@hellosct1
Qui... est Christophe Villeneuve ?
Le 5 juin 2014
OWASP 2013
✔ Failles d'injection
✔ Violation d'authentification et de
Session
✔ Cross-Site Scripting (XSS)
✔ Référence directe non sécurisée à
un objet
✔ Mauvaise configuration de sécurité
✔ Données sensibles accessible
✔ Manque de sécurité au niveau des
rôles
✔ Falsification de requête (CSRF)
✔ Utilisation de composants connus
vulnérables
✔ Redirections non validées
Le 5 juin 2014
A
M
P
Rapport
OWASP 2013
Le 5 juin 2014
Sommaire
● A => Apache => Architecture / Serveur
● M => MySQL => Base de données
● P => PHP => Langage / webService / API
Le 5 juin 2014
Architecture / Serveur
Le 5 juin 2014
● A1 - Injection en ligne de commande
● A5 - Mauvaise configuration sécurité
● A6 - Exposition de données sensibles
● NC - Exécution fichiers malicieux
Le 5 juin 2014
✔ Configuration non à jour
✔ Pas de maintenance
✔ Mise à disposition des
fonctions
✔ Exec
✔ System
● Autre manière de prise en
main du système
● Serveur Zombie
●
Principe de l'attaque Conséquence
Injection de ligne de commandes
A1
Le 5 juin 2014
Désactiver dans php.ini
– exec
– passthru
– shell_exec
– system
– proc_open
– popen
– curl_exec
– curl_multi_exec
– parse_ini_file
– show_source
A1
Affiche le nom de l'utilisateur
<?php
echo exec('whoami');
?>
Par conséquent :
safe_mode = Off
allow_url_fopen=Off
allow_url_include=Off
Le 5 juin 2014
Cacher le contenu des dossiers
● Ex : http://votreURL.com/nomDossier
● Solution : fichier index.php
<?php
header("Location: ../index.php");
die() ;
?>
A5
Le 5 juin 2014
✔ Exécuter un fichier (ex :
PHPShell)
✔ Accès en écriture
✔ FTP, SSH, HTTP PUT,
WebDav...
✔ Absence de contrôle du
dépôt des fichiers
✔ Fonction include()
● Prise en main du système
● Accéder à des informations
non autorisées
Principe de l'attaque Conséquence
Exécution fichier malicieux
NC
Le 5 juin 2014
Pour se protéger des fichiers malicieux
● <?php Include ($file) ; ?>
– Ex : http://votreURL.com/file=toto.php
● Solution
– http://votreURL.com/toto.php
● Ecraser le contenu de la variable
– http://urlPirate.com/hack.gif
● Solution dans php.ini
– allow_url_fopen = off
A6
Le 5 juin 2014
php_self non bloqué
© Source : D4FR
Le 5 juin 2014
php_self non bloqué (autre vue)
© Source : D4FR
Le 5 juin 2014
Protection de base
● Php.ini
– safe_mode = off
● Verrouillez les dossiers
– .htaccess
– Chmod (444)  ou 665 ou 775
● HTTPs / SSL
A6
Le 5 juin 2014
Base de données
Le 5 juin 2014
● A1 - Injection SQL
● A4 - Référence direct non sécurisés à un objet
Le 5 juin 2014
✔ Envoie du code SQL
✔ Formulaire
✔ GET / POST
✔ Cookies
✔ ...
✔ Contournement
authentification
✔ Récupération des données
de la base
✔ Récupération de fichiers
✔ Exécution de codes
Principe de l'attaque Conséquence
Injection SQL
A1
Le 5 juin 2014
Utilisation du SQL
● Risque : Requête avec des simples quotes
SELECT * FROM 'users' WHERE 'username'='$login' AND 'password'='$pass'
● Saisie : $login = hello $pass = hello
SELECT * FROM 'users' WHERE 'username'='hello' AND 'password'='hello'
● Saisie : $login = ' OR '1'='1' $pass =  ' OR '1'='1'
SELECT * FROM 'users' WHERE 'username'='' OR '1'='1'' AND 'password'='' OR '1'='1''
● Saisie : $login = ' OR 1=1"); drop table users; $pass =
SELECT * FROM 'users' WHERE 'username'='' OR 1=1"); drop table users;' AND
'password'=''
TRUE
TRUE
TRUE
Sauf si BDD lecture
A1
Le 5 juin 2014
Se protéger contre injection SQL
● addslashes()
– Ajoute des antislashs dans une chaîne
SELECT * FROM 'users'
WHERE 'username'=' ' OR '1'='1' '
AND 'password'=' ' OR '1'='1' '
mysqli_real_escape_string()
– Protège les caractères spéciaux
● pdo_quote()
– Place des guillemets simples autour d'une chaîne entrée
A1
les guillemets simples '
les guillemets doubles "
les slashes /
les caractères NULL
Le 5 juin 2014
✔ Absence de contrôle dans
une requête
✔ Récupération d'une valeur
visible + modification
✔ Trouver d'autres données et
informations
✔
✔ Usurpation d'identifiant
✔ Effectué des opérations non
prévues initialement
Principe de l'attaque Conséquence
Modifier les arguments dynamiquement
A4
Le 5 juin 2014
Comportement des objets
● Mauvaise utilisation
<?php
$sql = "SELECT * FROM users WHERE id = :id " ;
$qid = $cnx->prepare($sql);
$qid->execute (array (':id', $id) ) ;
$rows = $qid->fecthAll(PDO::FETCH_ASSOC) ;
?>
● Exemple
http://votreURL.com/compte?id=IdFalse
A4
● Une solution
$qid->bindParam(':id', $id, PDO::PARAM_INT);
$qid->bindParam(':id', $id, PDO::PARAM_STR, 12);
$qid->execute () ;
OU
Le 5 juin 2014
Langage / API / ...
Le 5 juin 2014
● A1 – Injection API
● A2 -Violation de gestion d'authentification et de session
● A3 - Cross Site Scripting (XSS)
● A6 - Exposition de données sensibles
● A7 - Manque de contrôle d'accès au niveau fonctionnel
● A8 - Falsification de requête intersites (CSRF)
● A9 - Utilisation de composants vulnérable
● A10 - Redirections et renvois non validés
Le 5 juin 2014
Provenance coté front
● Navigation
● Formulaire
– Champs : Input, upload,...
● Des API Couche Métier
Le 5 juin 2014
✔ XSS
✔ Risque applicatif
✔ Langage de requête
✔ Ldap / Xpath
✔ Langage interprété du type
✔ eval, system, consorts
✔ Vol de sessions (cookies)
✔ Redirection de pages
✔ Scanner des pages
✔ Usurpation d'identitée /
Phishing
✔ Contrôle du navigateur
Principe de l'attaque Conséquence
Naviguer dans les pages webs A3
Le 5 juin 2014
La navigation en mode tranquille
● Absence de protection
<?php
echo "Un petit risque de
<script>alert ('hack')</script>";
?>
● Avec une protection
<?php
echo htmlentities("Un petit risque de
<script>alert ('hack')</script>");
?>
A3
Le 5 juin 2014
Contre mesures
● Données entrantes :
– Valider chaque valeur (longueur, type...)
filter_var() ou filter_input()
– strip_tags // supprime caractère NULL
– Htmlentities // balise html
● Données en sortie :
– Htmlspecialchars() ;
A3
Le 5 juin 2014
✔ Suivi des utilisateurs par
SESSION ID
✔ Caractéristiques utilisateur
stockées coté serveur par
une variable de session
✔ Gestion des états : Cookies /
Get / Post
✔ Chiffrement faible
✔ Vol des données
SESSION_ID si elles ne
sont pas cryptées
✔ Utilisation ailleurs
Principe de l'attaque Conséquence
Gestion des données entrées A2
Le 5 juin 2014
Solution de contrôle (1/3)
● Prévoir la présence d'une clef de hashage caché
– Générer une clef cryptée de hachage
● IP
● Navigateur utilisé
● Une durée de validité
● ...
– Différencier les formulaires
– Eviter la protection en MD5 pour HASH
A2
Le 5 juin 2014
Solution de contrôle (2/3)
● Remède contre Session ID
– Cryptage par HASH
– Eviter le MD5 avec la date de connexion
– Contenu aléatoire
● Oublier les champs Hidden avec des caractéristiques
utilisateur
A2
Le 5 juin 2014
Solution de contrôle (3/3)
● Lors de l'envoie d'un formulaire, quelques bases
– If isset($_POST['string'])  { /* … */ }
– If sizeof ($_POST['string'])>0 { /* ... */ }
● Attention aux superglobales
$GLOBALS, $_SERVER, $_GET, $_POST, $_FILES,
$_SESSION, $_REQUEST, $_ENV
– $str=htmlentities ($_COOKIE['string'],ENT_QUOTES) ;
A2
Le 5 juin 2014
Se protéger de PHP_SELF
Exemple :
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="exemple" value="reussi" />
<input type="submit" value="Submit" />
</form>
● Dans un formulaire ou construction d'une URL
<?php echo htmlentities($_SERVER['PHP_SELF']); ?>
A6
Le 5 juin 2014
✔ Accéder à des pages non
autorisés
✔ Modifier les droits
✔ Prise de contrôle du site
✔ Générer des actions non
autorisés
Principe de l'attaque Conséquence
Contrôle d'accès au niveau fonctionnel
A7
Le 5 juin 2014
Solution contrôle d'accès
● Exemple
– http://urlSite.com/getpage
– http://urlSite.com/admin_getpage
● Solutions
– Vérifier le contrôle d'accès (principe identification)
– Vérifier les URLs
A7
Le 5 juin 2014
✔ Trouver
✔ des données stockés /
archivés en clair
✔ Espace privée non
partagée
✔ Communication avec la
banque
✔ Déterminer les algorithmes
de cryptage faible
✔ Cible principale
✔ Mot de passes
✔ Données sensibles non
chiffrées
✔ Carte bleu
Principe de l'attaque Conséquence
Exposition de données sensibles
A6-
A9-
A10
Le 5 juin 2014
Filtrer les données sensibles
● Utilisation du port https
if($_SERVER['SERVER_PORT'] != 443)
{
header('Location: https://urlDuSite.com/prive.php');
exit;
}
● Vérifier le certificat
A6-
A9-
A10
<?php
if (!isset($_SERVER['SSL_CLIENT_M_SERIAL'])
|| !isset($_SERVER['SSL_CLIENT_V_END'])
|| !isset($_SERVER['SSL_CLIENT_VERIFY'])
|| $_SERVER['SSL_CLIENT_VERIFY'] !== 'SUCCESS'
|| !isset($_SERVER['SSL_CLIENT_I_DN'])
) { //FALSE;
}
if ($_SERVER['SSL_CLIENT_V_REMAIN'] <= 0) {
// FALSE;
}
// TRUE;
?>
Le 5 juin 2014
✔ Falsification de requêtes
(CSRF)
✔ Modification du contenu
d'une page
✔ But éviter de passer par le
formulaire
✔ Conduire l'utilisateur vers
un site malveillant
✔ Lui forcer la main
✔ Ex : download
Principe de l'attaque Conséquence
Modifier le comportement A8
Le 5 juin 2014
Imposer un comportement
● Créer un token ou un jeton de sécurité (toutes les pages)
A8
<?php
session_start();
$token = uniqid(rand(), true); // jeton unique
$_SESSION['token'] = $token; // stockage
// heure de création du jeton
$_SESSION['token_time'] = time();
?>
<html><body>
<form id="form" name="form" method="post"
action="traitement.php">
...
<input type="hidden" name="token"
id="token" value="<?php echo $token;?>"/>
...
</form>
</body></html>
<?php
session_start();
if(isset($_SESSION['token'])
&& isset($_SESSION['token_time'])
&& isset($_POST['token']))
{
//Si jeton session = au formulaire
if($_SESSION['token'] ==
$_POST['token'])
{
// exécution du code
}
}
// sinon erreur
?>
Passage 1 Passage 2
Le 5 juin 2014
✔ Envoie du code SQL
● Formulaire
● GET / POST
● Cookies
● ...
✔ Contournement
authentification
✔ Récupération des données
de la base
✔ Récupération de fichiers
✔ Exécution de codes
Principe de l'attaque Conséquence
API Métier : connexion LDAP A1
Le 5 juin 2014
Comportement injection LDAP
● Formulaire exemple
<input type="text" size=20 name="username">
● Connexion Ldap
String ldapSearchQuery = "(cn=" + $username + ")";
System.out.println(ldapSearchQuery);
● Solution
– Valider les données avant de générer une requête de
recherche
A1
Le 5 juin 2014
Webservices A1
function encrypt_decrypt($action, $string) {
$output = false;
$encrypt_method = "AES-256-CBC";
$secret_key = 'votre clef secrete';
$secret_iv = 'vecteur aleatoire secret';
$key = hash('sha256', $secret_key); // hash
// prepare une methode de cryptage sur 16 caractères
$iv = substr(hash('sha256', $secret_iv), 0, 16);
if( $action == 'encrypt' ) {
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
}
else if( $action == 'decrypt' ){
$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}
return $output;
}
PHP 5.4.x
Le 5 juin 2014
Le 5 juin 2014
Résumé des impacts pour PHP
Classement OWASP 2013 Serveur PHPBDD
X X
X
X
X
X X
X
A1-Failles d'injection
A2-Violation d'authentification et de Session
A3-Cross-Site Scripting (XSS)
A4-Référence directe non sécurisée à un objet
A5-Mauvaise configuration de sécurité
A6-Données sensibles accessible
A7-Manque de sécurité au niveau des rôles
A8-Falsification de requête (CSRF)
A9-Utilisation de composants connus vulnérables
A10-Redirections non validées
X
X
X
NC- Exécution fichiers malicieux X
X
X
Le 5 juin 2014
Merci... et protégez-vous avec...
@hellosct1
Réf : www.owasp.org

Más contenido relacionado

La actualidad más candente

Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Asma Messaoudi
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeMarie Tapia
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.keyDamien Seguy
 
La sécurité sur le web
La sécurité sur le webLa sécurité sur le web
La sécurité sur le webSofteam agency
 
Sécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseSécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseAntonio Fontes
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebCyrille Grandval
 
Les principales failles de sécurité des applications Web actuelles
Les principales failles de sécurité des applications Web actuellesLes principales failles de sécurité des applications Web actuelles
Les principales failles de sécurité des applications Web actuellesXavier Kress
 
OWASP Québec - octobre 2016 - présentation sur les mots de passe
OWASP Québec - octobre 2016 - présentation sur les mots de passeOWASP Québec - octobre 2016 - présentation sur les mots de passe
OWASP Québec - octobre 2016 - présentation sur les mots de passePatrick Leclerc
 
La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015Sebastien Gioria
 
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan MarcilASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan MarcilCyber Security Alliance
 
Présentation Top10 CEGID Lyon
Présentation Top10 CEGID LyonPrésentation Top10 CEGID Lyon
Présentation Top10 CEGID LyonSébastien GIORIA
 
Les menaces applicatives
Les menaces applicativesLes menaces applicatives
Les menaces applicativesBee_Ware
 
Les 5 risques les plus critiques des applications Web selon l'OWASP
Les 5 risques les plus critiques des applications Web selon l'OWASPLes 5 risques les plus critiques des applications Web selon l'OWASP
Les 5 risques les plus critiques des applications Web selon l'OWASPyaboukir
 
Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouseSébastien GIORIA
 
Securite des Applications dans le Cloud
Securite des Applications dans le CloudSecurite des Applications dans le Cloud
Securite des Applications dans le CloudSebastien Gioria
 
Securing your API and mobile application - API Connection FR
Securing your API and mobile application - API Connection FRSecuring your API and mobile application - API Connection FR
Securing your API and mobile application - API Connection FRSebastien Gioria
 

La actualidad más candente (20)

Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme Thémée
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.key
 
La sécurité sur le web
La sécurité sur le webLa sécurité sur le web
La sécurité sur le web
 
Sécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseSécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défense
 
Cours Secu Web
Cours Secu WebCours Secu Web
Cours Secu Web
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative Web
 
Les principales failles de sécurité des applications Web actuelles
Les principales failles de sécurité des applications Web actuellesLes principales failles de sécurité des applications Web actuelles
Les principales failles de sécurité des applications Web actuelles
 
OWASP Québec - octobre 2016 - présentation sur les mots de passe
OWASP Québec - octobre 2016 - présentation sur les mots de passeOWASP Québec - octobre 2016 - présentation sur les mots de passe
OWASP Québec - octobre 2016 - présentation sur les mots de passe
 
La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015
 
Comprendre la securite web 2017
Comprendre la securite web 2017Comprendre la securite web 2017
Comprendre la securite web 2017
 
Sécurité des applications web
Sécurité des applications webSécurité des applications web
Sécurité des applications web
 
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan MarcilASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
 
Présentation Top10 CEGID Lyon
Présentation Top10 CEGID LyonPrésentation Top10 CEGID Lyon
Présentation Top10 CEGID Lyon
 
Les menaces applicatives
Les menaces applicativesLes menaces applicatives
Les menaces applicatives
 
Les 5 risques les plus critiques des applications Web selon l'OWASP
Les 5 risques les plus critiques des applications Web selon l'OWASPLes 5 risques les plus critiques des applications Web selon l'OWASP
Les 5 risques les plus critiques des applications Web selon l'OWASP
 
Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouse
 
20100114 Waf V0.7
20100114 Waf V0.720100114 Waf V0.7
20100114 Waf V0.7
 
Securite des Applications dans le Cloud
Securite des Applications dans le CloudSecurite des Applications dans le Cloud
Securite des Applications dans le Cloud
 
Securing your API and mobile application - API Connection FR
Securing your API and mobile application - API Connection FRSecuring your API and mobile application - API Connection FR
Securing your API and mobile application - API Connection FR
 

Destacado

Guide de securite php
Guide de securite phpGuide de securite php
Guide de securite phpbelfkih
 
Recetriohipervinculo 1 im_joanasosa
Recetriohipervinculo 1 im_joanasosaRecetriohipervinculo 1 im_joanasosa
Recetriohipervinculo 1 im_joanasosaantonio12345h
 
Les Français et la relation homme machine
Les Français et la relation homme machineLes Français et la relation homme machine
Les Français et la relation homme machineIpsos France
 
Rapport de Sécurité Check Point 2016
Rapport de Sécurité Check Point 2016Rapport de Sécurité Check Point 2016
Rapport de Sécurité Check Point 2016Blandine Delaporte
 
Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]Wixiweb
 
Organisation type-contrôleinterne
Organisation type-contrôleinterneOrganisation type-contrôleinterne
Organisation type-contrôleinterneAZOUZ HASNAOUI
 
Ingénierie de la sécurité incendie
Ingénierie de la sécurité incendieIngénierie de la sécurité incendie
Ingénierie de la sécurité incendieProfesseur Falloul
 
La prevention des risques machines
La prevention des risques machinesLa prevention des risques machines
La prevention des risques machineschokri SOLTANI
 
La demarche de prevention des risques machines
 La demarche de prevention des risques machines La demarche de prevention des risques machines
La demarche de prevention des risques machineschokri SOLTANI
 
Présentation atelier tubes&co
Présentation atelier tubes&coPrésentation atelier tubes&co
Présentation atelier tubes&coSens&co
 
Atelier Lean Startup : Théorie et Pratique
Atelier Lean Startup : Théorie et PratiqueAtelier Lean Startup : Théorie et Pratique
Atelier Lean Startup : Théorie et PratiqueSébastien Sacard
 
Herramientas ofimaticas tauro17
Herramientas ofimaticas tauro17Herramientas ofimaticas tauro17
Herramientas ofimaticas tauro17tauro17
 
Calendrier eléctoral global RDC-2016
Calendrier eléctoral global RDC-2016Calendrier eléctoral global RDC-2016
Calendrier eléctoral global RDC-2016Patrice Piardon
 
C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]
C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]
C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]mayra123321
 
Presentación sin título
Presentación sin títuloPresentación sin título
Presentación sin títuloJOSÉ TOMÁS
 
Presentaciondepres
PresentaciondepresPresentaciondepres
Presentaciondepresguest9d213a
 

Destacado (20)

Guide de securite php
Guide de securite phpGuide de securite php
Guide de securite php
 
Recetriohipervinculo 1 im_joanasosa
Recetriohipervinculo 1 im_joanasosaRecetriohipervinculo 1 im_joanasosa
Recetriohipervinculo 1 im_joanasosa
 
Les Français et la relation homme machine
Les Français et la relation homme machineLes Français et la relation homme machine
Les Français et la relation homme machine
 
Rapport de Sécurité Check Point 2016
Rapport de Sécurité Check Point 2016Rapport de Sécurité Check Point 2016
Rapport de Sécurité Check Point 2016
 
Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]
 
Organisation type-contrôleinterne
Organisation type-contrôleinterneOrganisation type-contrôleinterne
Organisation type-contrôleinterne
 
Ingénierie de la sécurité incendie
Ingénierie de la sécurité incendieIngénierie de la sécurité incendie
Ingénierie de la sécurité incendie
 
La prevention des risques machines
La prevention des risques machinesLa prevention des risques machines
La prevention des risques machines
 
La demarche de prevention des risques machines
 La demarche de prevention des risques machines La demarche de prevention des risques machines
La demarche de prevention des risques machines
 
Présentation atelier tubes&co
Présentation atelier tubes&coPrésentation atelier tubes&co
Présentation atelier tubes&co
 
Atelier Lean Startup : Théorie et Pratique
Atelier Lean Startup : Théorie et PratiqueAtelier Lean Startup : Théorie et Pratique
Atelier Lean Startup : Théorie et Pratique
 
Atelier projet urbain
Atelier  projet urbain Atelier  projet urbain
Atelier projet urbain
 
Herramientas ofimaticas tauro17
Herramientas ofimaticas tauro17Herramientas ofimaticas tauro17
Herramientas ofimaticas tauro17
 
Calendrier eléctoral global RDC-2016
Calendrier eléctoral global RDC-2016Calendrier eléctoral global RDC-2016
Calendrier eléctoral global RDC-2016
 
C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]
C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]
C:\Documents And Settings\Personal\Mis Documentos\Presentacion Power Point[1]
 
Presentación sin título
Presentación sin títuloPresentación sin título
Presentación sin título
 
Tics en las aulas
Tics en las aulasTics en las aulas
Tics en las aulas
 
Chap2
Chap2Chap2
Chap2
 
Presentaciondepres
PresentaciondepresPresentaciondepres
Presentaciondepres
 
Introducción a las reformas laborales de 2010 a 2013. .
Introducción  a las reformas laborales de 2010 a 2013. .Introducción  a las reformas laborales de 2010 a 2013. .
Introducción a las reformas laborales de 2010 a 2013. .
 

Similar a La sécurité et php

Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18e-Xpert Solutions SA
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continuneuros
 
Meetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a ServiceMeetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a ServiceFrederic Leger
 
Accélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces webAccélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces webGrégoire Larreur de Farcy
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHPJean-Marie Renouard
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Sécurisez-vous avec des solutions Open Source
Sécurisez-vous avec des solutions Open SourceSécurisez-vous avec des solutions Open Source
Sécurisez-vous avec des solutions Open SourceCertilience
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
TelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihm
TelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihmTelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihm
TelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihmMarc Hage Chahine
 
La securite au coeur des projets web
La securite au coeur des projets webLa securite au coeur des projets web
La securite au coeur des projets webChristophe Villeneuve
 
MariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursMariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursChristophe Villeneuve
 
La sécurité au coeur des projets webs de demain
La sécurité au coeur des projets webs de demainLa sécurité au coeur des projets webs de demain
La sécurité au coeur des projets webs de demainChristophe Villeneuve
 
Techdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerTechdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerDamien Seguy
 

Similar a La sécurité et php (20)

Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18Présentation de nos MVP - F5 devCentral - Event 09-10-18
Présentation de nos MVP - F5 devCentral - Event 09-10-18
 
Comprendre la securite web
Comprendre la securite webComprendre la securite web
Comprendre la securite web
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 
Meetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a ServiceMeetup vault - ScaaS Secrets as a Service
Meetup vault - ScaaS Secrets as a Service
 
Accélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces webAccélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces web
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHP
 
La sécurité : ange ou démon ?
La sécurité : ange ou démon ?La sécurité : ange ou démon ?
La sécurité : ange ou démon ?
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Les tests de securite devops
Les tests de securite devopsLes tests de securite devops
Les tests de securite devops
 
Sécurisez-vous avec des solutions Open Source
Sécurisez-vous avec des solutions Open SourceSécurisez-vous avec des solutions Open Source
Sécurisez-vous avec des solutions Open Source
 
Cakephp
CakephpCakephp
Cakephp
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Les tests de sécurité
Les tests de sécuritéLes tests de sécurité
Les tests de sécurité
 
TelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihm
TelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihmTelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihm
TelecomValley 2017 05-18-ARMAGNACQ_automatisation+test_ihm
 
Sécurité MySQL
Sécurité MySQLSécurité MySQL
Sécurité MySQL
 
La securite au coeur des projets web
La securite au coeur des projets webLa securite au coeur des projets web
La securite au coeur des projets web
 
MariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursMariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeurs
 
La sécurité au coeur des projets webs de demain
La sécurité au coeur des projets webs de demainLa sécurité au coeur des projets webs de demain
La sécurité au coeur des projets webs de demain
 
Techdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerTechdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguer
 

Más de Christophe Villeneuve

La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxChristophe Villeneuve
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webChristophe Villeneuve
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteChristophe Villeneuve
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Christophe Villeneuve
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le designChristophe Villeneuve
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activitesChristophe Villeneuve
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftChristophe Villeneuve
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthnChristophe Villeneuve
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueChristophe Villeneuve
 

Más de Christophe Villeneuve (20)

MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
pister les pisteurs
pister les pisteurspister les pisteurs
pister les pisteurs
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le web
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnante
 
Pentest bus pirate
Pentest bus piratePentest bus pirate
Pentest bus pirate
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le design
 
Foxfooding semaine 3
Foxfooding semaine 3Foxfooding semaine 3
Foxfooding semaine 3
 
Foxfooding
FoxfoodingFoxfooding
Foxfooding
 
Accessibilite web wcag rgaa
Accessibilite web wcag rgaaAccessibilite web wcag rgaa
Accessibilite web wcag rgaa
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activites
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et Microsoft
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthn
 
Send large files with addons
Send large files with addonsSend large files with addons
Send large files with addons
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratique
 
Donnez la voix aux machines
Donnez la voix aux machinesDonnez la voix aux machines
Donnez la voix aux machines
 

La sécurité et php

  • 1. La sécurité et PHP Christophe Villeneuve @hellosct1
  • 2. Qui... est Christophe Villeneuve ?
  • 3. Le 5 juin 2014 OWASP 2013 ✔ Failles d'injection ✔ Violation d'authentification et de Session ✔ Cross-Site Scripting (XSS) ✔ Référence directe non sécurisée à un objet ✔ Mauvaise configuration de sécurité ✔ Données sensibles accessible ✔ Manque de sécurité au niveau des rôles ✔ Falsification de requête (CSRF) ✔ Utilisation de composants connus vulnérables ✔ Redirections non validées
  • 4. Le 5 juin 2014 A M P Rapport OWASP 2013
  • 5. Le 5 juin 2014 Sommaire ● A => Apache => Architecture / Serveur ● M => MySQL => Base de données ● P => PHP => Langage / webService / API
  • 6. Le 5 juin 2014 Architecture / Serveur
  • 7. Le 5 juin 2014 ● A1 - Injection en ligne de commande ● A5 - Mauvaise configuration sécurité ● A6 - Exposition de données sensibles ● NC - Exécution fichiers malicieux
  • 8. Le 5 juin 2014 ✔ Configuration non à jour ✔ Pas de maintenance ✔ Mise à disposition des fonctions ✔ Exec ✔ System ● Autre manière de prise en main du système ● Serveur Zombie ● Principe de l'attaque Conséquence Injection de ligne de commandes A1
  • 9. Le 5 juin 2014 Désactiver dans php.ini – exec – passthru – shell_exec – system – proc_open – popen – curl_exec – curl_multi_exec – parse_ini_file – show_source A1 Affiche le nom de l'utilisateur <?php echo exec('whoami'); ?> Par conséquent : safe_mode = Off allow_url_fopen=Off allow_url_include=Off
  • 10. Le 5 juin 2014 Cacher le contenu des dossiers ● Ex : http://votreURL.com/nomDossier ● Solution : fichier index.php <?php header("Location: ../index.php"); die() ; ?> A5
  • 11. Le 5 juin 2014 ✔ Exécuter un fichier (ex : PHPShell) ✔ Accès en écriture ✔ FTP, SSH, HTTP PUT, WebDav... ✔ Absence de contrôle du dépôt des fichiers ✔ Fonction include() ● Prise en main du système ● Accéder à des informations non autorisées Principe de l'attaque Conséquence Exécution fichier malicieux NC
  • 12. Le 5 juin 2014 Pour se protéger des fichiers malicieux ● <?php Include ($file) ; ?> – Ex : http://votreURL.com/file=toto.php ● Solution – http://votreURL.com/toto.php ● Ecraser le contenu de la variable – http://urlPirate.com/hack.gif ● Solution dans php.ini – allow_url_fopen = off A6
  • 13. Le 5 juin 2014 php_self non bloqué © Source : D4FR
  • 14. Le 5 juin 2014 php_self non bloqué (autre vue) © Source : D4FR
  • 15. Le 5 juin 2014 Protection de base ● Php.ini – safe_mode = off ● Verrouillez les dossiers – .htaccess – Chmod (444)  ou 665 ou 775 ● HTTPs / SSL A6
  • 16. Le 5 juin 2014 Base de données
  • 17. Le 5 juin 2014 ● A1 - Injection SQL ● A4 - Référence direct non sécurisés à un objet
  • 18. Le 5 juin 2014 ✔ Envoie du code SQL ✔ Formulaire ✔ GET / POST ✔ Cookies ✔ ... ✔ Contournement authentification ✔ Récupération des données de la base ✔ Récupération de fichiers ✔ Exécution de codes Principe de l'attaque Conséquence Injection SQL A1
  • 19. Le 5 juin 2014 Utilisation du SQL ● Risque : Requête avec des simples quotes SELECT * FROM 'users' WHERE 'username'='$login' AND 'password'='$pass' ● Saisie : $login = hello $pass = hello SELECT * FROM 'users' WHERE 'username'='hello' AND 'password'='hello' ● Saisie : $login = ' OR '1'='1' $pass =  ' OR '1'='1' SELECT * FROM 'users' WHERE 'username'='' OR '1'='1'' AND 'password'='' OR '1'='1'' ● Saisie : $login = ' OR 1=1"); drop table users; $pass = SELECT * FROM 'users' WHERE 'username'='' OR 1=1"); drop table users;' AND 'password'='' TRUE TRUE TRUE Sauf si BDD lecture A1
  • 20. Le 5 juin 2014 Se protéger contre injection SQL ● addslashes() – Ajoute des antislashs dans une chaîne SELECT * FROM 'users' WHERE 'username'=' ' OR '1'='1' ' AND 'password'=' ' OR '1'='1' ' mysqli_real_escape_string() – Protège les caractères spéciaux ● pdo_quote() – Place des guillemets simples autour d'une chaîne entrée A1 les guillemets simples ' les guillemets doubles " les slashes / les caractères NULL
  • 21. Le 5 juin 2014 ✔ Absence de contrôle dans une requête ✔ Récupération d'une valeur visible + modification ✔ Trouver d'autres données et informations ✔ ✔ Usurpation d'identifiant ✔ Effectué des opérations non prévues initialement Principe de l'attaque Conséquence Modifier les arguments dynamiquement A4
  • 22. Le 5 juin 2014 Comportement des objets ● Mauvaise utilisation <?php $sql = "SELECT * FROM users WHERE id = :id " ; $qid = $cnx->prepare($sql); $qid->execute (array (':id', $id) ) ; $rows = $qid->fecthAll(PDO::FETCH_ASSOC) ; ?> ● Exemple http://votreURL.com/compte?id=IdFalse A4 ● Une solution $qid->bindParam(':id', $id, PDO::PARAM_INT); $qid->bindParam(':id', $id, PDO::PARAM_STR, 12); $qid->execute () ; OU
  • 23. Le 5 juin 2014 Langage / API / ...
  • 24. Le 5 juin 2014 ● A1 – Injection API ● A2 -Violation de gestion d'authentification et de session ● A3 - Cross Site Scripting (XSS) ● A6 - Exposition de données sensibles ● A7 - Manque de contrôle d'accès au niveau fonctionnel ● A8 - Falsification de requête intersites (CSRF) ● A9 - Utilisation de composants vulnérable ● A10 - Redirections et renvois non validés
  • 25. Le 5 juin 2014 Provenance coté front ● Navigation ● Formulaire – Champs : Input, upload,... ● Des API Couche Métier
  • 26. Le 5 juin 2014 ✔ XSS ✔ Risque applicatif ✔ Langage de requête ✔ Ldap / Xpath ✔ Langage interprété du type ✔ eval, system, consorts ✔ Vol de sessions (cookies) ✔ Redirection de pages ✔ Scanner des pages ✔ Usurpation d'identitée / Phishing ✔ Contrôle du navigateur Principe de l'attaque Conséquence Naviguer dans les pages webs A3
  • 27. Le 5 juin 2014 La navigation en mode tranquille ● Absence de protection <?php echo "Un petit risque de <script>alert ('hack')</script>"; ?> ● Avec une protection <?php echo htmlentities("Un petit risque de <script>alert ('hack')</script>"); ?> A3
  • 28. Le 5 juin 2014 Contre mesures ● Données entrantes : – Valider chaque valeur (longueur, type...) filter_var() ou filter_input() – strip_tags // supprime caractère NULL – Htmlentities // balise html ● Données en sortie : – Htmlspecialchars() ; A3
  • 29. Le 5 juin 2014 ✔ Suivi des utilisateurs par SESSION ID ✔ Caractéristiques utilisateur stockées coté serveur par une variable de session ✔ Gestion des états : Cookies / Get / Post ✔ Chiffrement faible ✔ Vol des données SESSION_ID si elles ne sont pas cryptées ✔ Utilisation ailleurs Principe de l'attaque Conséquence Gestion des données entrées A2
  • 30. Le 5 juin 2014 Solution de contrôle (1/3) ● Prévoir la présence d'une clef de hashage caché – Générer une clef cryptée de hachage ● IP ● Navigateur utilisé ● Une durée de validité ● ... – Différencier les formulaires – Eviter la protection en MD5 pour HASH A2
  • 31. Le 5 juin 2014 Solution de contrôle (2/3) ● Remède contre Session ID – Cryptage par HASH – Eviter le MD5 avec la date de connexion – Contenu aléatoire ● Oublier les champs Hidden avec des caractéristiques utilisateur A2
  • 32. Le 5 juin 2014 Solution de contrôle (3/3) ● Lors de l'envoie d'un formulaire, quelques bases – If isset($_POST['string'])  { /* … */ } – If sizeof ($_POST['string'])>0 { /* ... */ } ● Attention aux superglobales $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_SESSION, $_REQUEST, $_ENV – $str=htmlentities ($_COOKIE['string'],ENT_QUOTES) ; A2
  • 33. Le 5 juin 2014 Se protéger de PHP_SELF Exemple : <form action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="text" name="exemple" value="reussi" /> <input type="submit" value="Submit" /> </form> ● Dans un formulaire ou construction d'une URL <?php echo htmlentities($_SERVER['PHP_SELF']); ?> A6
  • 34. Le 5 juin 2014 ✔ Accéder à des pages non autorisés ✔ Modifier les droits ✔ Prise de contrôle du site ✔ Générer des actions non autorisés Principe de l'attaque Conséquence Contrôle d'accès au niveau fonctionnel A7
  • 35. Le 5 juin 2014 Solution contrôle d'accès ● Exemple – http://urlSite.com/getpage – http://urlSite.com/admin_getpage ● Solutions – Vérifier le contrôle d'accès (principe identification) – Vérifier les URLs A7
  • 36. Le 5 juin 2014 ✔ Trouver ✔ des données stockés / archivés en clair ✔ Espace privée non partagée ✔ Communication avec la banque ✔ Déterminer les algorithmes de cryptage faible ✔ Cible principale ✔ Mot de passes ✔ Données sensibles non chiffrées ✔ Carte bleu Principe de l'attaque Conséquence Exposition de données sensibles A6- A9- A10
  • 37. Le 5 juin 2014 Filtrer les données sensibles ● Utilisation du port https if($_SERVER['SERVER_PORT'] != 443) { header('Location: https://urlDuSite.com/prive.php'); exit; } ● Vérifier le certificat A6- A9- A10 <?php if (!isset($_SERVER['SSL_CLIENT_M_SERIAL']) || !isset($_SERVER['SSL_CLIENT_V_END']) || !isset($_SERVER['SSL_CLIENT_VERIFY']) || $_SERVER['SSL_CLIENT_VERIFY'] !== 'SUCCESS' || !isset($_SERVER['SSL_CLIENT_I_DN']) ) { //FALSE; } if ($_SERVER['SSL_CLIENT_V_REMAIN'] <= 0) { // FALSE; } // TRUE; ?>
  • 38. Le 5 juin 2014 ✔ Falsification de requêtes (CSRF) ✔ Modification du contenu d'une page ✔ But éviter de passer par le formulaire ✔ Conduire l'utilisateur vers un site malveillant ✔ Lui forcer la main ✔ Ex : download Principe de l'attaque Conséquence Modifier le comportement A8
  • 39. Le 5 juin 2014 Imposer un comportement ● Créer un token ou un jeton de sécurité (toutes les pages) A8 <?php session_start(); $token = uniqid(rand(), true); // jeton unique $_SESSION['token'] = $token; // stockage // heure de création du jeton $_SESSION['token_time'] = time(); ?> <html><body> <form id="form" name="form" method="post" action="traitement.php"> ... <input type="hidden" name="token" id="token" value="<?php echo $token;?>"/> ... </form> </body></html> <?php session_start(); if(isset($_SESSION['token']) && isset($_SESSION['token_time']) && isset($_POST['token'])) { //Si jeton session = au formulaire if($_SESSION['token'] == $_POST['token']) { // exécution du code } } // sinon erreur ?> Passage 1 Passage 2
  • 40. Le 5 juin 2014 ✔ Envoie du code SQL ● Formulaire ● GET / POST ● Cookies ● ... ✔ Contournement authentification ✔ Récupération des données de la base ✔ Récupération de fichiers ✔ Exécution de codes Principe de l'attaque Conséquence API Métier : connexion LDAP A1
  • 41. Le 5 juin 2014 Comportement injection LDAP ● Formulaire exemple <input type="text" size=20 name="username"> ● Connexion Ldap String ldapSearchQuery = "(cn=" + $username + ")"; System.out.println(ldapSearchQuery); ● Solution – Valider les données avant de générer une requête de recherche A1
  • 42. Le 5 juin 2014 Webservices A1 function encrypt_decrypt($action, $string) { $output = false; $encrypt_method = "AES-256-CBC"; $secret_key = 'votre clef secrete'; $secret_iv = 'vecteur aleatoire secret'; $key = hash('sha256', $secret_key); // hash // prepare une methode de cryptage sur 16 caractères $iv = substr(hash('sha256', $secret_iv), 0, 16); if( $action == 'encrypt' ) { $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv); $output = base64_encode($output); } else if( $action == 'decrypt' ){ $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv); } return $output; } PHP 5.4.x
  • 43. Le 5 juin 2014
  • 44. Le 5 juin 2014 Résumé des impacts pour PHP Classement OWASP 2013 Serveur PHPBDD X X X X X X X X A1-Failles d'injection A2-Violation d'authentification et de Session A3-Cross-Site Scripting (XSS) A4-Référence directe non sécurisée à un objet A5-Mauvaise configuration de sécurité A6-Données sensibles accessible A7-Manque de sécurité au niveau des rôles A8-Falsification de requête (CSRF) A9-Utilisation de composants connus vulnérables A10-Redirections non validées X X X NC- Exécution fichiers malicieux X X X
  • 45. Le 5 juin 2014 Merci... et protégez-vous avec... @hellosct1 Réf : www.owasp.org