+ All Categories
Home > Documents > Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de...

Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de...

Date post: 27-May-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
41
Prog Web Server - 2017-2018 Elena Cabrio - PHP - Bases de données - Prog Web Serveur 02 / 29 Debugger PHP Security Lire les donnees Écrire des données
Transcript
Page 1: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 02 / 29

Debugger PHP Security Lire les donnees Écrire des données

Page 2: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 02 / 41

• A la différence de nombreux autres langages, PHP n'est pas compilé et est donc très avare de messages d'erreurs.

• La partie de débuggage est une phase essentielle de la programmation d'une application, ne serait que pour faire un rapport de tests : tester chaque fonction afin de voir ce qu'il se passe dans tous les cas.

• Le débuggage est également nécessaire lorsque l'on bloque sur un truc que l'on ne comprend pas.

Debugger PHP Security

Page 3: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 03 / 41

• Aérer le code

<?php

$toto = 3; $titi = 4; $somme = $toto + $titi; echo $somme;

?>

<?php

$toto = 3;

$titi = 4;

$somme = $toto + $titi;

echo $somme;

?>

Debugger PHP Security

Page 4: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 04 / 41

• Indenter le code, deux possibilités:

<?php

$toto = 2;

if ($toto == 2) {

echo '$toto vaut 2';

}

elseif ($toto == 3) {

echo '$toto vaut 3';

}

else {

echo '$toto n\'est pas

égal à 2 ou 3';

}

?>

<?php

$toto = 2;

if ($toto == 2)

{

echo '$toto vaut 2';

}

elseif ($toto == 3)

{

echo '$toto vaut 3';

}

else

{

echo '$toto n\'est pas

égal à 2 ou 3';

}

?>

Debugger PHP Security

Page 5: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 05 / 41

• Commenter le code<?php

// Ceci est un commentaire sur une seule ligne, style c++/* Ceci est un commentaire surplusieurs lignes */

?>

• Placez des commentaires sur: – vos fonctions (décrivant les paramètres de la fonction et son rôle)– sur les sections critiques dans votre code (ex. sur une difficulté algorithmique)– dans vos entêtes de classes pour décrire le rôle de votre classe, le genre d'objets

qu'elle génère.

• Mais attention à ne pas tomber dans l'excès de commentaires…<?php

// on affiche la somme

echo $somme;

?>

Debugger PHP Security

Page 6: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 06 / 41

Prenez l'habitude (lors de la phase de conception d'un script), d'afficher le contenu de vos variables

• variable de type chaîne de caractères<?php

$chaine = " test";

echo '.'.$chaine.'.';

?>

Debugger PHP Security

Page 7: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 07 / 41

• variables de type tableau (array)<?php

$table = array ('a' => 'pomme', 'b' => 'banane', 'c' => array

('x', 'y', 'z'));

print_r ($table);

?>

Array(

[a] => pomme[b] => banane[c] => Array

([0] => x[1] => y[2] => z

))

Plus verbal encore que son précédent: la fonction var_dump() donne le type d'une variable ou des champs d'un tableau etc. ainsi que leur contenu exact et, pour les chaines, le nombre de caractères.

Debugger PHP Security

Page 8: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 08 / 41

• Cas des conditionnelles– Attention à l'utilisation d'un seul = pour votre test (à la place de ==)

• Cas des boucles– si votre boucle ne démarre pas du tout, vérifier la valeur de votre

compteur à l'initialisation de la boucle– si votre boucle semble tourner à l'infini, vérifier bien que la valeur pour la

sortie de la boucle arrivera à coup sur– Si votre boucle effectue des traitements non voulus sur vos données,

prenez l'habitude de placer un echo dans votre boucle afin de voir la valeur de vos variables à chaque passage de boucle

<?php

$toto = 2;

for ($i = 0; $i < 5; $i++) {

$resultat = $toto * $i;

echo 'Passage numéro '.$i.' => multiplication = '.$resultat;

echo '<br />';

}

?>

Debugger PHP Security

Page 9: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 09 / 41

• Cas des fichiers. Vérifier toujours :– d'une part le chemin pour accéder à votre fichier (chemins relatifs /

absolus)

– d'autre part le chmod de ce fichier (afin de voir si vous avez les droits pour accéder à ce fichier).

• Problèmes avec MySQL– placez vos requêtes SQL dans des variables (par exemple $sql, au lieu de

faire directement un mysql_query)

– faites un echo de votre $sql, et copier coller votre requête dans votre PHPMyAdmin : si PHPMyAdmin sort bien un résultat, c'est que votre code de récupération n'est pas fameux.

– comptez toujours le nombre de résultat retourné de votre requête SQL à l'aide d'un mysql_num_rows

– mettez un or die muni de la fonction mysql_error sur vos lancement de requêtes SQL afin de voir (si la requête ne passe pas) ce qui pose problème.

Debugger PHP Security

Page 10: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 10 / 41

<?php

// Afficher les erreurs à l'écran

ini_set('display_errors', 1);

// Enregistrer les erreurs dans un fichier de log

ini_set('log_errors', 1);

// Nom du fichier qui enregistre les logs (attention aux droits à

l'écriture)

ini_set('error_log', dirname(__file__) . '/log_error_php.txt');

// Afficher les erreurs et les avertissements

error_reporting(e_all);

?>

Debugger PHP Security

Page 11: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 11 / 41

Le comportement de ces fonctions est affecté par la configuration dans php.ini• display_errors string

détermine si les erreurs doivent être affichées à l'écran ou

• int error_reporting ([ int $level ] )

fixe le niveau de rapport d'erreurs PHP<?php

error_reporting(0); // Désactiver le rapport d'erreurs

error_reporting(E_ERROR | E_WARNING | E_PARSE); // Rapporte les erreurs d'exécutionde script

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // Rapporter les E_NOTICE peut vous aider à améliorer vos scripts (variables non initialisées, variables mal orthographiées..)

error_reporting(E_ALL ^ E_NOTICE); // Rapporte toutes les erreurs à part les E_NOTICE. C'est la configuration par défaut de php.ini

error_reporting(E_ALL); // Repporte toutes les erreurs PHP (pour PHP 3, utilisezl'entier 63)

ini_set('error_reporting', E_ALL); // Même chose que error_reporting(E_ALL);

?>

Debugger PHP Security

Page 12: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 12 / 41

Erreur Remède

Parse error: parse error in xxxx.php on line y Il s'agit d'une erreur de syntaxe. Vérifiez si: - vous n'avez pas oublié un ; marquant la fin

d'une instruction- si il ne manque pas un $ (dollar) devant le

nom d'une variable.N'hésitez pas à contrôler les lignes précédentes. L'erreur se trouve souvent juste au-dessus.

Warning: Unable to create [chemin] No such file or directory in your script on line [numero]

Le chemin vers le répertoire sensé contenir le fichier ou bien le chemin du répertoire dans lequel le fichier doit être crée est incorrect

Warning: Variable $zzzz is not an array or string in xxxx.php on line y

Vous tentez de manipuler une valeur numérique avec une fonction dédiée aux chaînes ou aux tableaux.

Warning: Cannot add header information headers already sent in xxxx.php on line y

Vous avez tenté d'effectuer un Header après que l'entête HTTP ait envoyé au client. Vérifiez si une sortie (echo, print, message d'erreur, voir même du code html) ne s'exécute pas avant votre Header

Debugger PHP Security

Page 13: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41

Erreur Remède

Fatal error: Maximum execution time exceeded in xxxx.php on line y

PHP dispose d'un mécanisme permettant de se prémunir des scripts susceptibles d'engendrer un temps d'exécution trop important pouvant saturer un serveur. Par défaut, ce temps est de 30 secondes.

Fatal Error: Call to undefined function: xxxx() in yyy.php on line z

La fonction que vous appelez n'existe pas. Ce peut-être une fonction liée à une librairie externe Dans ce cas, un simple phpinfo() vous renseignera sur les paramètres de compilation de votre version de PHP. Peut-être s'agit-il sinon d'une de vos propres fonctions. Vérifiez alors qu'elle existe (notamment si votre script y accéde bien si elle se trouve dans un autre fichier). Et dans tous les cas, contrôlez de plus près le nom de la fonction appelée (orthographe, etc.).

Wrong parameter count for %s()

La fonction est appelée avec un nombre insuffisant de paramètre, ou bien avec trop de paramètres. Certaines fonctions ont besoin d'un minimum de paramètres (array()), et généralement d'un maximum.

Debugger PHP Security

Page 14: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 14 / 41

• IDE (Integrated Development Environment)– Zend Framework avec NetBeans

Debugger PHP Security

Page 15: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 15 / 41

Debugger PHP Security

Page 16: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 16 / 41

• PHP est un langage puissant et l'interpréteur, qu'il soit inclus dans le serveur web en tant que module ou bien compilé en version CGI, est capable d'accéder aux fichiers, d'exécuter des commandes, et d'ouvrir des connexions réseaux. Toutes ces propriétés rendent fragile la sécurité d'un serveur web.

• équilibrer les risques et l'utilisabilité

Debugger PHP Security

Page 17: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 17 / 41

client serveur

1 2

3

Debugger PHP Security

Page 18: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 18 / 41

client serveur

1 2

3

Debugger PHP Security

Page 19: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 19 / 41

• Deux types de flux de données à sécuriser:

– Les données entrantes : dans un premier temps, sécurisation des données qui proviennent de l’utilisateur et donc de formulaire,s avant de pouvoir les entrer dans la BDD.

– Les données sortantes : puis, sécurisation de l'affichage des données issues de la BDD.

Debugger PHP Security

Page 20: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 20 / 41

• Attaque par injection SQL: le pirate détourne la requête en injectant du code dans les champs du formulaire

• Ex: Détournement de clause WHERE<?php

$requete = "SELECT * FROM membre

WHERE pseudo = '".$_GET['pseudo']."'

AND password = '".$_GET['password']."' ";

?>

Debugger PHP Security

Page 21: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 21 / 41

• Attaque par injection SQL: le pirate détourne la requête en injectant du code dans les champs du formulaire

• Ex: Détournement de clause WHERE<?php

$requete = "SELECT * FROM membre

WHERE pseudo = '".$_GET['pseudo']."'

AND password = '".$_GET['password']."' ";

?>

<?php$_GET['password'] = " ' OR 1 = '1 ";

?>

Debugger PHP Security

Page 22: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 22 / 41

• Attaque par injection SQL: le pirate détourne la requête en injectant du code dans les champs du formulaire

• Ex: Détournement de clause WHERE<?php

$requete = "SELECT * FROM membre

WHERE pseudo = '".$_GET['pseudo']."'

AND password = '' OR 1 = '1' ";

?>

<?php$_GET['password'] = " ' OR 1 = '1 ";

?>

Debugger PHP Security

Page 23: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 23 / 41

• Attaque par injection SQL: le pirate détourne la requête en injectant du code dans les champs du formulaire

• Ex: Détournement de la clause DELETE<?php

$requete = "DELETE FROM membre

WHERE id = '".$_GET['id']."' ";

?>

Debugger PHP Security

Page 24: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 24 / 41

• Attaque par injection SQL: le pirate détourne la requête en injectant du code dans les champs du formulaire

• Ex: Détournement de la clause DELETE<?php

$requete = "DELETE FROM membre

WHERE id = '".$_GET['id']."' ";

?>

<?php$_GET['id'] = "1 ' OR id > '0 ";

?>

Debugger PHP Security

Page 25: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 25 / 41

• Attaque par injection SQL: le pirate détourne la requête en injectant du code dans les champs du formulaire

• Ex: Détournement de la clause DELETE<?php

$requete = "DELETE FROM membre

WHERE id = '1' OR id > '0' ";

?>

<?php$_GET['id'] = "1 ' OR id > '0 ";

?>

Debugger PHP Security

Page 26: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 26 / 41

• Il faut protéger les données issues du formulaire avant de les entrer dans la requête

• Echapper les valeurs pour les rendre inertes et sans danger• Directive PHP: magic_quotes, qui propose de échapper

systématiquement les caractères suivant :– les guillemets simples ' ;– les guillemets doubles " ;– les slashes / ;– les caractères NULL.

en ajoutant des antislashes dans les chaînes qui transitent vers le script PHP (= fonction addslashes()).

<?php

$requete = "DELETE FROM membre

WHERE id = '".$_GET['id']."' ";

?>

Debugger PHP Security

Page 27: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 27 / 41

• Il faut protéger les données issues du formulaire avant de les entrer dans la requête

• Echapper les valeurs pour les rendre inertes et sans danger• Directive PHP: magic_quotes, qui propose de échapper

systématiquement les caractères suivant :– les guillemets simples ' ;– les guillemets doubles " ;– les slashes / ;– les caractères NULL.

en ajoutant des antislashes dans les chaînes qui transitent vers le script PHP (= fonction addslashes()).

<?php

$requete = "DELETE FROM membre

WHERE id = '".$_GET['id']."' ";

?>

<?php$requete = "SELECT pseudo FROM membre WHERE id = '\"1\"mettez l'injection que vous voulez ici\"' ";

?>

Debugger PHP Security

Page 28: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 28 / 41

• Echappe les caractères suivants:– les guillemets simples ' ;– les guillemets doubles " :– les slashes / ;– les caractères NULL ;– les caractères suivants : , , \x00 et \x1a.

• utiliser cette fonction pour sécuriser les chaînes transmises aux requêtes (il faut aussi que vos données soient placées dans des guillemets)

<?php

$pseudo = mysql_real_escape_string($_POST['pseudo']);

$requete = "SELECT * FROM membre WHERE pseudo = '$pseudo' ";

?>

Debugger PHP Security

Page 29: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 29 / 41

Si les données ne sont pas protégés à l'affichage, les pirates peuvent entrer des balises nocives et notamment du JavaScript

<html>

<head>

<title>Injection HTML</title>

</head>

<body>

<?php echo "Salut, tu t'appelles ".$_GET['pseudo'];

?>

</body>

</html>

Debugger PHP Security

Page 30: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 30 / 41

Si les données ne sont pas protégés à l'affichage, les pirates peuvent entrer des balises nocives et notamment du JavaScript

<html>

<head>

<title>Injection HTML</title>

</head>

<body>

<?php echo "Salut, tu t'appelles ".$_GET['pseudo'];

?>

</body>

</html>

http://monsiteweb.com/index.php?pseudo=%3Ci%3zozor%3C%2Fi%3E

Debugger PHP Security

Page 31: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 31 / 41

Si les données ne sont pas protégés à l'affichage, les pirates peuvent entrer des balises nocives et notamment du JavaScript

<html>

<head>

<title>Injection HTML</title>

</head>

<body>

<?php echo "Salut, tu t'appelles ".$_GET['pseudo'];

?>

</body>

</html>

http://monsiteweb.com/index.php?pseudo=<i>zozor</i>

Debugger PHP Security

Page 32: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 32 / 41

Rend toutes les balise XHTML inopérantes

<html>

<head>

<title>Injection HTML</title>

</head>

<body>

<?php echo "Salut, tu t'appelles htmlentities($_GET['pseudo']);?>

</body>

</html>

http://monsiteweb.com/index.php?pseudo=<i>zozor</i><script src="http://sitepirate.com/injection.js" >

Debugger PHP Security

Page 33: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 33 / 41

Si les données ne sont pas protégés à l'affichage, les pirates peuvent entrer des balises nocives et notamment du JavaScript

<html>

<head>

<title>Injection HTML</title>

</head>

<body>

<?php echo "Salut, tu t'appelles ".$_GET['pseudo'];

?>

</body>

</html>

http://monsiteweb.com/index.php?pseudo=<i>zozor</i><script src="http://sitepirate.com/injection.js" >

<body>&lt;i&gt;zozor&lt;/i&gt;&lt;script src=&quot;injection.js&quot; &gt;

</body>

Debugger PHP Security

Page 34: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 34 / 41

• version moins complète de htmlentities()

• remplace les caractères suivants par leur entité HTML :– Les délimiteurs de balise < et > ;

– Les guillemets simples ' ;

– Les guillemets doubles " ;

– Le "et commercial" &.

• mieux utiliser htmlentities() si vous n'êtes pas certain de maîtriser vos charsets

Debugger PHP Security

Page 35: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 35 / 41

• Une liste blanche correspond à l'ensemble des données que l'internaute a le droit de rentrer

– Exemple: Pays d’origine

<?php$liste_pays = array('Belgique','Canada','France','Hongrie','Slovénie');

?>

Debugger PHP Security

Page 36: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 36 / 41

• Une liste blanche correspond à l'ensemble des données que l'internaute a le droit de rentrer

– Exemple: Pays d’origine

<?php$liste_pays = array('Belgique','Canada','France','Hongrie','Slovénie');

?>

<?php$pays_transmis = $_POST['pays'];

// Vérification de la présence du pays dans la listeif(in_array($pays_transmis, $liste_pays)){

echo 'pays valide.';}else{

echo 'pays invalide, veuillez ressaisir votre pays. ';}

?>

Debugger PHP Security

Page 37: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 37 / 41

• La liste noire filtre les données interdites

• Exemple:

<?php$liste_insulte = array('crapule','chenapan','goujat','manant');

?>

Debugger PHP Security

Page 38: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 38 / 41

• La liste noire filtre les données interdites

• Exemple:

<?php$liste_insulte = array('crapule','chenapan','goujat','manant');

?>

<?php// Récupération depuis une BDD$message = $resultat['message'];

// Le message est considéré comme valide$autorisation = true;

// On parcourt toutes les insultes de la liste noireforeach($liste_insulte as $insulte){

// Si une insulte est comprise dans le messageif(stripos($message, $insulte) !== false){

$autorisation = false;break;

}}

?>

Debugger PHP Security

Page 39: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 39 / 41

• Liste grise: utilisation en complément la liste blanche et la liste noire:

– une liste blanche qui autorise seulement des valeurs données ;

– une liste noire qui filtre les données incorrectes.

• Le filtrage des données est considérablement augmenté !

Debugger PHP Security

Page 40: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 40 / 41

• Protéger les chaînes de caractères dans les requêtes, la meilleure solution à ce jour étant la préparation des requêtes ;

• Protéger les données affichées par le navigateur avec htmlentities() ;

• Mettre en place un filtre systématique par liste grise.

Debugger PHP Security

Page 41: Debugger PHP Security Lire les donnees Écrire des données · Elena Cabrio - PHP - Bases de données - Prog Web Serveur 13 / 41 Erreur Remède Fatal error: Maximum execution time

Pro

g Web

Server -2

01

7-2

01

8

Elena Cabrio - PHP - Bases de données - Prog Web Serveur 41 / 41

• http://www.lephpfacile.com/cours/20-le-debuggage

• http://php.net/manual/fr/security.intro.php

• https://openclassrooms.com/courses/securite-php-securiser-

les-flux-de-donnees

Debugger PHP Security


Recommended