SlideShare a Scribd company logo
1 of 45
Download to read offline
La 
sécurité 
pour les développeurs 
@hellosct1
Qui... est Christophe Villeneuve ? 
<< 
afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – demoinparis – ici et maintenant – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – neuros - elephpant
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
A 
M 
P 
SOLUTION 
Rapport 
OWASP 2013
Sommaire 
● A => Apache => Architecture / Serveur 
● M => MySQL => Base de données 
● P => PHP => Langage / webService / API
A 
Architecture / Serveur
● A1 - Injection en ligne de commande 
● A5 - Mauvaise configuration sécurité 
● A6 - Exposition de données sensibles 
● NC - Exécution fichiers malicieux
Injection de ligne de commandes 
Principe de l'attaque Conséquence 
✔ Configuration non à jour 
✔ Pas de maintenance 
✔ Mise à disposition des 
fonctions 
✔ Exec 
✔ System 
● Autre manière de prise en 
main du système 
● Serveur Zombie 
● 
OWASP : A1 - Injection en ligne de commande
Désactiver dans php.ini 
– exec 
– passthru 
– shell_exec 
– system 
– proc_open 
– popen 
– curl_exec 
– curl_multi_exec 
– parse_ini_file 
– show_source 
Affiche le nom de l'utilisateur 
<?php 
echo exec('whoami'); 
?> 
Par conséquent : 
safe_mode = Off 
allow_url_fopen=Off 
allow_url_include=Off 
OWASP : A1 - Injection en ligne de commande
Cacher le contenu des dossiers 
● Ex : http://votreURL.com/nomDossier 
● Solution : fichier index.php 
<?php 
header("Location: ../index.php"); 
die() ; 
?> 
OWASP : A5 - Mauvaise configuration sécurité
Principe de l'attaque Conséquence 
✔ 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 
Exécution fichier malicieux 
OWASP : NC - Exécution fichiers malicieux
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 
OWASP : A6 - Exposition de données sensibles
php_self non bloqué 
© Source : D4.FR 
OWASP : A6 - Exposition de données sensibles
Protection de base 
● Php.ini 
– safe_mode = off 
● Verrouillez les dossiers 
– .htaccess 
– Chmod (444) ou 665 ou 775 
● HTTPs / SSL 
OWASP : A6 - Exposition de données sensibles
M 
Base de données
● A1 - Injection SQL 
● A4 - Référence direct non sécurisés à un objet
Principe de l'attaque Conséquence 
✔ 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 
Injection SQL 
OWASP : A1 - Injection SQL
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' 
TRUE 
● Saisie : $login = ' OR '1'='1' $pass = ' OR '1'='1' 
SELECT * FROM 'users' WHERE 'username'='' OR '1'='1'' AND 'password'='' OR '1'='1'' 
TRUE 
TRUE 
● Saisie : $login = ' OR 1=1"); drop table users; $pass = 
SELECT * FROM 'users' WHERE 'username'='' OR 1=1"); drop table users;' AND 
'password'='' 
Sauf si BDD lecture 
OWASP : A1 - Injection SQL
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 
les guillemets simples ' 
les guillemets doubles " 
les slashes / 
les caractères NULL 
OWASP : A1 - Injection SQL
Modifier les arguments dynamiquement 
Principe de l'attaque Conséquence 
✔ 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 
OWASP : A4 - Référence direct non sécurisés à un objet
Comportement des objets 
● Exemple 
http://votreURL.com/compte?id=IdFalse 
● 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) ; 
?> 
● Une solution 
$qid->bindParam(':id', $id, PDO::PARAM_INT); 
$qid->bindParam(':id', $id, PDO::PARAM_STR, 12); 
$qid->execute () ; 
OU 
OWASP : A4 - Référence direct non sécurisés à un objet
P 
Langage
● 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 
OWASP : A1 - Injection en ligne de commande
Provenance coté front 
● Navigation 
● Formulaire 
– Champs : Input, upload,... 
● Des API Couche Métier 
OWASP : A1 – Injection API
Principe de l'attaque Conséquence 
✔ 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 
Gestion des données entrées 
OWASP : A2 -Violation de gestion d'authentification et de session
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 
OWASP : A2 -Violation de gestion d'authentification et de session
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 
OWASP : A2 -Violation de gestion d'authentification et de session
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) ; 
OWASP : A2 -Violation de gestion d'authentification et de session
Naviguer dans les pages webs 
Principe de l'attaque Conséquence 
✔ 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 
OWASP : A3 - Cross Site Scripting (XSS)
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>"); 
?> 
OWASP : A3 - Cross Site Scripting (XSS)
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() ; 
OWASP : A3 - Cross Site Scripting (XSS)
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']); ?> 
OWASP : A6 - Exposition de données sensibles
Contrôle d'accès au niveau fonctionnel 
Principe de l'attaque Conséquence 
✔ Accéder à des pages non 
autorisés 
✔ Modifier les droits 
✔ Prise de contrôle du site 
✔ Générer des actions non 
autorisés 
OWASP : A7 - Manque de contrôle d'accès au niveau fonctionnel
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 
OWASP : A7 - Manque de contrôle d'accès au niveau fonctionnel
Principe de l'attaque Conséquence 
✔ 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 
Exposition de données sensibles 
OWASP : A1 / A6 / A10
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 <?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; 
?> 
OWASP : A6 / A9 / A10
Principe de l'attaque Conséquence 
✔ 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 
Modifier le comportement 
OWASP : A8 - Falsification de requête intersites (CSRF)
Imposer un comportement 
● Créer un token ou un jeton de sécurité (toutes les pages) 
Passage 1 Passage 2 
<?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 
?> 
OWASP : A8 - Falsification de requête intersites (CSRF)
API Métier
API Métier : connexion LDAP 
Principe de l'attaque Conséquence 
✔ 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 
OWASP : A1 – Injection API
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 
OWASP : A1 – Injection API
Webservices 
function encrypt_decrypt($action, $string) { 
Solution 
PHP 5.4.x 
$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; 
} 
OWASP : A1 – Injection API
Les impacts pour un développement 
Classement OWASP 2013 Serveur BDD Langage 
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
Retenir... 1 phrase 
protégez-vous 
www.OWASP.org

More Related Content

What's hot

Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapBassem ABCHA
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
 
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
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partiekadzaki
 
La sécurité sur le web
La sécurité sur le webLa sécurité sur le web
La sécurité sur le webSofteam agency
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpGabriele Santini
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirYves Van Goethem
 
OWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French versionOWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French versionspl0it
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4🏁 Pierre-Henry Soria 💡
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique🏁 Pierre-Henry Soria 💡
 
Cours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partieCours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partiekadzaki
 

What's hot (16)

Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
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
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
La sécurité sur le web
La sécurité sur le webLa sécurité sur le web
La sécurité sur le web
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
 
Configuration PHP5
Configuration PHP5Configuration PHP5
Configuration PHP5
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
OWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French versionOWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French version
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique
 
Cours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partieCours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partie
 

Viewers also liked

Cataratas Victoria Diapositivas
Cataratas Victoria DiapositivasCataratas Victoria Diapositivas
Cataratas Victoria Diapositivasguest058536ad
 
06 02 opérations de sauvegarde
06 02 opérations de sauvegarde06 02 opérations de sauvegarde
06 02 opérations de sauvegardeNoël
 
Les attaques reseaux par zellagui Amine
Les attaques reseaux par zellagui AmineLes attaques reseaux par zellagui Amine
Les attaques reseaux par zellagui AmineZellagui Amine
 
06 04 arp
06 04 arp06 04 arp
06 04 arpNoël
 
06 03 route
06 03 route06 03 route
06 03 routeNoël
 
06 05 résolution de nom
06 05 résolution de nom06 05 résolution de nom
06 05 résolution de nomNoël
 
06 01 interfaces
06 01 interfaces06 01 interfaces
06 01 interfacesNoël
 
07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dns07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dnsNoël
 
08 03 sécurisation d'un serveur web avec ssl
08 03 sécurisation d'un serveur web avec ssl08 03 sécurisation d'un serveur web avec ssl
08 03 sécurisation d'un serveur web avec sslNoël
 
SSL/TLS : Faille Heartbleed
SSL/TLS : Faille HeartbleedSSL/TLS : Faille Heartbleed
SSL/TLS : Faille HeartbleedThomas Moegli
 
LPIC1 10 01 logs
LPIC1 10 01 logsLPIC1 10 01 logs
LPIC1 10 01 logsNoël
 
10 02 authentification PAM
10 02 authentification PAM10 02 authentification PAM
10 02 authentification PAMNoël
 
Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration Bee_Ware
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)Noël
 
Panorama de la cybercriminalité en 2016
Panorama de la cybercriminalité en 2016Panorama de la cybercriminalité en 2016
Panorama de la cybercriminalité en 2016Serrerom
 
06 02 ip
06 02 ip06 02 ip
06 02 ipNoël
 
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
 

Viewers also liked (20)

Cataratas Victoria Diapositivas
Cataratas Victoria DiapositivasCataratas Victoria Diapositivas
Cataratas Victoria Diapositivas
 
06 02 opérations de sauvegarde
06 02 opérations de sauvegarde06 02 opérations de sauvegarde
06 02 opérations de sauvegarde
 
Les attaques reseaux par zellagui Amine
Les attaques reseaux par zellagui AmineLes attaques reseaux par zellagui Amine
Les attaques reseaux par zellagui Amine
 
06 04 arp
06 04 arp06 04 arp
06 04 arp
 
06 03 route
06 03 route06 03 route
06 03 route
 
06 05 résolution de nom
06 05 résolution de nom06 05 résolution de nom
06 05 résolution de nom
 
06 01 interfaces
06 01 interfaces06 01 interfaces
06 01 interfaces
 
07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dns07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dns
 
08 03 sécurisation d'un serveur web avec ssl
08 03 sécurisation d'un serveur web avec ssl08 03 sécurisation d'un serveur web avec ssl
08 03 sécurisation d'un serveur web avec ssl
 
Ethical Hacking
Ethical HackingEthical Hacking
Ethical Hacking
 
SSL/TLS : Faille Heartbleed
SSL/TLS : Faille HeartbleedSSL/TLS : Faille Heartbleed
SSL/TLS : Faille Heartbleed
 
LPIC1 10 01 logs
LPIC1 10 01 logsLPIC1 10 01 logs
LPIC1 10 01 logs
 
10 02 authentification PAM
10 02 authentification PAM10 02 authentification PAM
10 02 authentification PAM
 
Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)
 
Panorama de la cybercriminalité en 2016
Panorama de la cybercriminalité en 2016Panorama de la cybercriminalité en 2016
Panorama de la cybercriminalité en 2016
 
06 02 ip
06 02 ip06 02 ip
06 02 ip
 
Protocole ARP/RARP
Protocole ARP/RARPProtocole ARP/RARP
Protocole ARP/RARP
 
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
 

Similar to La sécurite pour les developpeurs - OWF

La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et phpneuros
 
Introduction vulnérabilité web
Introduction vulnérabilité webIntroduction vulnérabilité web
Introduction vulnérabilité webdavystoffel
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Asma Messaoudi
 
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
 
Hacking Open source et Sécurité, préconisations
Hacking Open source et Sécurité, préconisationsHacking Open source et Sécurité, préconisations
Hacking Open source et Sécurité, préconisationsCertilience
 
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)Hackfest Communication
 
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
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another frameworkLAHAXE Arnaud
 
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
 
Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoringDavid BAFFALEUF
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
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
 
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
 
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
 

Similar to La sécurite pour les developpeurs - OWF (20)

La sécurité et php
La sécurité et phpLa sécurité et php
La sécurité et php
 
Introduction vulnérabilité web
Introduction vulnérabilité webIntroduction vulnérabilité web
Introduction vulnérabilité web
 
Sécurité MySQL
Sécurité MySQLSécurité MySQL
Sécurité MySQL
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
 
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
 
Hacking Open source et Sécurité, préconisations
Hacking Open source et Sécurité, préconisationsHacking Open source et Sécurité, préconisations
Hacking Open source et Sécurité, préconisations
 
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
 
Rmll.securite
Rmll.securiteRmll.securite
Rmll.securite
 
Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouse
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another framework
 
Comprendre la securite web 2017
Comprendre la securite web 2017Comprendre la securite web 2017
Comprendre la securite web 2017
 
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
 
Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoring
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
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 !
 
Formation php pdo
Formation php pdoFormation php pdo
Formation php pdo
 
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
 
20100114 Waf V0.7
20100114 Waf V0.720100114 Waf V0.7
20100114 Waf V0.7
 
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
 
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 ?
 

More from 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
 

More from 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écurite pour les developpeurs - OWF

  • 1. La sécurité pour les développeurs @hellosct1
  • 2. Qui... est Christophe Villeneuve ? << afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – demoinparis – ici et maintenant – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – neuros - elephpant
  • 3. 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. A M P SOLUTION Rapport OWASP 2013
  • 5. Sommaire ● A => Apache => Architecture / Serveur ● M => MySQL => Base de données ● P => PHP => Langage / webService / API
  • 7. ● A1 - Injection en ligne de commande ● A5 - Mauvaise configuration sécurité ● A6 - Exposition de données sensibles ● NC - Exécution fichiers malicieux
  • 8. Injection de ligne de commandes Principe de l'attaque Conséquence ✔ Configuration non à jour ✔ Pas de maintenance ✔ Mise à disposition des fonctions ✔ Exec ✔ System ● Autre manière de prise en main du système ● Serveur Zombie ● OWASP : A1 - Injection en ligne de commande
  • 9. Désactiver dans php.ini – exec – passthru – shell_exec – system – proc_open – popen – curl_exec – curl_multi_exec – parse_ini_file – show_source Affiche le nom de l'utilisateur <?php echo exec('whoami'); ?> Par conséquent : safe_mode = Off allow_url_fopen=Off allow_url_include=Off OWASP : A1 - Injection en ligne de commande
  • 10. Cacher le contenu des dossiers ● Ex : http://votreURL.com/nomDossier ● Solution : fichier index.php <?php header("Location: ../index.php"); die() ; ?> OWASP : A5 - Mauvaise configuration sécurité
  • 11. Principe de l'attaque Conséquence ✔ 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 Exécution fichier malicieux OWASP : NC - Exécution fichiers malicieux
  • 12. 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 OWASP : A6 - Exposition de données sensibles
  • 13. php_self non bloqué © Source : D4.FR OWASP : A6 - Exposition de données sensibles
  • 14. Protection de base ● Php.ini – safe_mode = off ● Verrouillez les dossiers – .htaccess – Chmod (444) ou 665 ou 775 ● HTTPs / SSL OWASP : A6 - Exposition de données sensibles
  • 15. M Base de données
  • 16. ● A1 - Injection SQL ● A4 - Référence direct non sécurisés à un objet
  • 17. Principe de l'attaque Conséquence ✔ 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 Injection SQL OWASP : A1 - Injection SQL
  • 18. 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' TRUE ● Saisie : $login = ' OR '1'='1' $pass = ' OR '1'='1' SELECT * FROM 'users' WHERE 'username'='' OR '1'='1'' AND 'password'='' OR '1'='1'' TRUE TRUE ● Saisie : $login = ' OR 1=1"); drop table users; $pass = SELECT * FROM 'users' WHERE 'username'='' OR 1=1"); drop table users;' AND 'password'='' Sauf si BDD lecture OWASP : A1 - Injection SQL
  • 19. 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 les guillemets simples ' les guillemets doubles " les slashes / les caractères NULL OWASP : A1 - Injection SQL
  • 20. Modifier les arguments dynamiquement Principe de l'attaque Conséquence ✔ 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 OWASP : A4 - Référence direct non sécurisés à un objet
  • 21. Comportement des objets ● Exemple http://votreURL.com/compte?id=IdFalse ● 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) ; ?> ● Une solution $qid->bindParam(':id', $id, PDO::PARAM_INT); $qid->bindParam(':id', $id, PDO::PARAM_STR, 12); $qid->execute () ; OU OWASP : A4 - Référence direct non sécurisés à un objet
  • 23. ● 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 OWASP : A1 - Injection en ligne de commande
  • 24. Provenance coté front ● Navigation ● Formulaire – Champs : Input, upload,... ● Des API Couche Métier OWASP : A1 – Injection API
  • 25. Principe de l'attaque Conséquence ✔ 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 Gestion des données entrées OWASP : A2 -Violation de gestion d'authentification et de session
  • 26. 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 OWASP : A2 -Violation de gestion d'authentification et de session
  • 27. 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 OWASP : A2 -Violation de gestion d'authentification et de session
  • 28. 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) ; OWASP : A2 -Violation de gestion d'authentification et de session
  • 29. Naviguer dans les pages webs Principe de l'attaque Conséquence ✔ 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 OWASP : A3 - Cross Site Scripting (XSS)
  • 30. 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>"); ?> OWASP : A3 - Cross Site Scripting (XSS)
  • 31. 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() ; OWASP : A3 - Cross Site Scripting (XSS)
  • 32. 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']); ?> OWASP : A6 - Exposition de données sensibles
  • 33. Contrôle d'accès au niveau fonctionnel Principe de l'attaque Conséquence ✔ Accéder à des pages non autorisés ✔ Modifier les droits ✔ Prise de contrôle du site ✔ Générer des actions non autorisés OWASP : A7 - Manque de contrôle d'accès au niveau fonctionnel
  • 34. 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 OWASP : A7 - Manque de contrôle d'accès au niveau fonctionnel
  • 35. Principe de l'attaque Conséquence ✔ 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 Exposition de données sensibles OWASP : A1 / A6 / A10
  • 36. 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 <?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; ?> OWASP : A6 / A9 / A10
  • 37. Principe de l'attaque Conséquence ✔ 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 Modifier le comportement OWASP : A8 - Falsification de requête intersites (CSRF)
  • 38. Imposer un comportement ● Créer un token ou un jeton de sécurité (toutes les pages) Passage 1 Passage 2 <?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 ?> OWASP : A8 - Falsification de requête intersites (CSRF)
  • 40. API Métier : connexion LDAP Principe de l'attaque Conséquence ✔ 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 OWASP : A1 – Injection API
  • 41. 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 OWASP : A1 – Injection API
  • 42. Webservices function encrypt_decrypt($action, $string) { Solution PHP 5.4.x $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; } OWASP : A1 – Injection API
  • 43.
  • 44. Les impacts pour un développement Classement OWASP 2013 Serveur BDD Langage 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. Retenir... 1 phrase protégez-vous www.OWASP.org