aperçu de « appingé2ici-docdyn-diapcours1 … · ↪ voir ... et

9
Sécurité Injec(on MySQL : le risque Le code suivant : va envoyer au serveur MySQL la requête : il faut « échapper » les quotes : $user='moi';$password="' OR ''='"; $query = "SELECT * FROM users WHERE user='$user' AND password='$password'"; mysql_query($query); SELECT * FROM users WHERE user='moi' AND password='' OR ''='' voir http://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ Etape 5 et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/ $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password) );

Upload: phungdat

Post on 12-Sep-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

Sécurité

Injec(on*MySQL*:*le*risque*

Le%code%suivant%:%%%%%%va%envoyer%au%serveur%MySQL%la%requête%:%%%%

 il%faut%«%échapper%»%les%quotes%:%%

$user='moi';$password="' OR ''='"; $query = "SELECT * FROM users " WHERE user='$user' AND password='$password'"; mysql_query($query);"

SELECT * FROM users WHERE user='moi' AND password='' OR ''=''"

↪ voir http://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html! http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ Etape 5!et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/!

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", " mysql_real_escape_string($user), " mysql_real_escape_string($password) ");"

Page 2: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

  Il%faut%«%échapper%»%les%quotes%:%Mais%la%configuraEon%du%serveur%lui%dit%peutOêtre%déjà%de%le%faire%systémaEquement%%%%%%%%%Alors%il%ne%faut%pas%toujours%le%faire%faire%en%plus%par%les%scripts%PHP%%%encapsuler%dans%une%foncEon%%%%%

Injec(on*MySQL*:*protec(on*

↪ voir http://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html!et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/!

Lorsque%les%pages%affichent%des%contenus%introduits%pas%les%visiteurs,%%%%%%%%comme%des%commentaires,%affichés%lorsque%la%page%est%visitée%par%les%suivants%%Le%principal%risque%est%que%le%code%à%afficher%conEenne%du%javascript,%%%%qui%sera%alors%exécuté%«sur%le%client%»,%%%%%%%%%%%et%pourra%afficher%un%encart%issu%d’un%autre%site%%%%%%%%%%%%%%ou%modifier%les%valeurs%idenEfiant%la%session%%% Quelles%balises%perme[ent%d’exécuter%du%javascript%?%%%%%%%%%%<script%language="javascript"%…%%%%%%%%%%<a%href="javascript:alert('coucou')">%%%%%%%%%%<img%onload=“alert('coucou')”%/>%%%%et%tous%les%événements%réacEfs%aux%images%%%%%%%%%%<iframe%oncload=“alert('coucou')">%%%%%%%%%%%%%%%%%%%%...%%%%%%%%%%%%%%%%%%%%%%%%%%%aux%encarts%%%%%%%%%%…%%%refuser%les%contenus%qui%conEennent%des%balises%«%à%risque%»%%%%%%%%%%%%%%%%%%%%%%%directement%sur%le%client%en%Javascript%ou%sur%le%serveur%en%PHP%

Valeurs*affichées*en*HTML**

=>*inser(on*de*pub*/*vol*de*session**

↪ voir http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/!et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/!

Page 3: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

 Comment%refuser%les%contenus%qui%conEennent%des%balises%«%à%risque%»%?%

 But%:%idenEfier%toutes%les%chaînes%de%caractères%qui%conEennent%un%«%moEf%»%

Par%exemple%%%%%%===>%%repérer%%%<a%…%%>%…%</a>%%%dans%%la%chaîne%de%caractères%:%%%%%%%%Défauts%:%%%%%•  les%calculs%sont%couteux%%s’il%est%possible%de%«%faire%plus%simple%»,%le%faire%

%%%Par%exemple,%en%PHP%uEliser%trim()%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%pour%enlever%les%blancs%en%début%et%fin%de%chaîne%

•  il%y%a%des%écarts%entre%les%implémentaEons%des%foncEons%%%%%%%%%%%%%%%%%%%pour%traiter%les%RegEx%dans%les%différents%langages%%

%%%%%%%%et%des%erreurs%dans%les%implémentaEons%courantes%%%%%%%%%%%%%%%%%%%%(%=%décallages%entre%les%résultats%et%la%théorie)%

Valeurs*affichées*en*HTML**

:*protec(on**expressions*régulières*

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/! http://www.regular-expressions.info/javascriptexample.html!et http://www.expreg.com/!et aussi http://lumadis.be/regex/tuto_pcre.php (utilisateurs avancés)!

le texte <a href="javascript:alert('coucou')">ce lien</a> n’est pas dangereux"

 But%:%repérer%%%<img%%…%/>%%%dans%%la%chaîne%de%caractères%:%%%%%%%%%

Expressions*régulières*:*

exemple*de*la*balise*<img>*

le texte <img src="avartar.gif" onload="alert('coucou')" /> n’est pas dangereux"

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/!

Page 4: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

 But%:%repérer%%%<a%…%%>%…%</a>%%%dans%%la%chaîne%de%caractères%:%%%%%%%%%

Expressions*régulières*:*

exemple*de*la*balise*<a>*

le texte <a href="javascript:alert('coucou')">ce lien</a> n’est pas dangereux"

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/!

 Comment%faire%en%PHP%?%2%bibliothèques%:%%%•%PCRE%%%%exécutent%des%codes%d’un%autre%langages%:%PERL%%%%%%%%%%%%%%%%%%%plusieurs%foncEons%dont%le%nom%commence%par%preg_...()"%%•%POSIX%%%plus%lent%que%PRCE%%%%%%%%%%%%%%%%%%%plusieurs%foncEons%dont%le%nom%commence%par%ereg_...() %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ou%split...() %%preg_match(%$regexp,%$subject,%$matches%)%

%%preg_match_all(%$regexp,%$subject,%$matches%)%%%%preg_replace($regexp,%$remplacement,%$subject)%%%%

$regexp%%%est%la%chaîne%qui%définit%le%moEf%à%retrouver%

Expressions*régulières*:*

par*des*fonc(ons*PHP*

↪ voir http://www.expreg.com/presentation.php!et http://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2!

après%avoir%trouvé%le%premier%résultat,%%la%recherche%conEnue%jusqu’à%la%fin%de%la%chaîne%

analyse%la%chaîne%jusqu’à%avoir%trouvé%le%moEf%

après%avoir%trouver%la%ou%les%chaînes,%%remplace%des%parEes%par%un%correspondant%%

Page 5: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

 But%:%repérer%%%<a%…%%>%…%</a>%%%dans%%la%chaîne%de%caractères%:%

%%%%%%%code%PHP%:%

%

%%%%%%%%

Expressions*régulières*:*

un*exemple*en*PHP**

le texte <a href="javascript:alert('coucou')">ce lien</a> n’est pas dangereux"

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/!

Expressions*régulières*:**

exemple*avec**preg_match()*%%%%%%%%%%%%%%%%%%%%%%preg_match()%

analyse%la%chaîne%jusqu’à%avoir%trouvé%le%moEf%

Page 6: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

Expressions*régulières*:**

exemple*avec**preg_match_all()*

preg_match_all()%après%avoir%trouvé%le%premier%résultat,%%la%recherche%conEnue%jusqu’à%la%fin%de%la%chaîne%

Expressions*régulières*:**

exemple*avec**preg_match_replace()*

preg_match_replace()%après%avoir%trouver%la%ou%les%chaînes,%%remplace%des%parEes%par%un%correspondant%%

Page 7: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

%En%plus%des%quotes%("",%%’’)%qui%sont%nécessaires%pour%le%langage%de%script,%%%%la%chaîne%qui%définit%le%moEf%%%%%%%%%%doit%être%délimitée%par%un%caractère%idenEque,%comme%/%ou%#,%%%%%%%%%et%peut%être%suivie%par%une%opEon%%%%Par%exemple%:%%%%%%%%#<a(.*)>(.*)</a>#%%%%%/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/%%%%%%Des%opEons%sont%spécifiables%:%%%%%%%%Par%exemple%:%%%%%%%/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/%%

Expressions*régulières*:*

délimiteurs*

↪ voir http://www.expreg.com/options.php!et http://fr.wikipedia.org/wiki/Expression_rationnelle!

i PCRE_CASELESS" insensible%à%la%casse%

u PCRE_UTF8" Les%chaînes%sont%traitées%en%UTFO8%

E PCRE_DOLLAR_ENDONLY" Le%caractère%$%ne%sera%«%réservé%»%que%pour%la%fin%de%chaîne%(sinon,%$%correspond%aussi%aux%fins%de%ligne)%

%%%%%%%%

Expressions*régulières*:*

symboles*

↪ voir http://www.expreg.com/symbole.php!Et http://fr.wikipedia.org/wiki/Expression_rationnelle!

^! Indique%le%début%de%la%chaîne%%%%O%exemple%^chat%%reconnaît%une%ligne%qui%commence%par%chat%%

$ ! Indique%la%fin%de%la%chaîne%%%%O%exemple%:%chat$%reconnaît%une%ligne%qui%finit%par%chat%%

.! Le%point%indique%n'importe%quel%caractère%

*! Indique%0,%1%ou%plusieurs%occurrences%du%caractère%ou%de%la%classe%précédente%

+! Indique%une%ou%plusieurs%occurrences%du%caractère%ou%de%la%classe%précédente%

?! Indique%0%ou%une%occurrence%du%caractère%ou%de%la%classe%précédente%

[ ]![0-9]!br[iu]n!

Délimiteur%de%classe%:%tous%les%caractères%énumérés%dans%la%classe%%%%O%exemple%:%tous%les%caractères%entre%0%et%9%%%%O%exemple%:%i%ou%u%=>%trouve%brun%et%brin%

- | ^! Dans%[%]%:%O%pour%de%…%à%…,%|%pour%l’alternaEve%%,%^sauf%le%caractère%qui%suit%

Page 8: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

%%%%%%%%

Expressions*régulières*:*

caractères*spéciaux*(blancs,*etc.)*

↪ voir http://www.expreg.com/symbole.php!Et http://fr.wikipedia.org/wiki/Expression_rationnelle!

\n! Indique%le%caractère%qui%code%la%«%nouvelle%ligne%»%

\r! Indique%le%caractère%qui%code%le%«%retour%chariot%»%

^! Indique%le%début%de%la%chaîne%%%%O%exemple%^chat%%reconnaît%une%ligne%qui%commence%par%chat%%

$ ! Indique%la%fin%de%la%chaîne%%%%O%exemple%:%chat$%reconnaît%une%ligne%qui%finit%par%chat%%

\b! Indique%une%limite%de%mot%dans%une%chaîne%

\d! Indique%un%chiffre%(caractère%entre%0%et%9,%donc%idenEfque%à%[0O9]%et%[[:digit:]])%

\D! Indique%la%classe%[^0O9],%c’estOàOdire,%qui%n’est%pas%un%chiffre%

\s! Indique%un%espace%blanc%\t,%\r,%\n,%\f%

\w! Indique%un%mot%(%correspond%à%[0O9a_zAOZ]%)%

•  chat|chien%:%correspond%aux%chaînes%de%caractères%%«%chat%»%ou%«%chien%»%%%%%%%%(et%seulement%à%cellesOci),%n'importe%où%dans%le%texte%(exemple%:%«%chatte%»).%

•  [cC]hat|[cC]hien%:%correspond%aux%chaînes%%%%%%%«%chat%»,%«%Chat%»,%«%chien%»%ou%«%Chien%»%%%%(et%seulement%à%cellesOci),%%%%%%%%%n'importe%où%dans%le%texte%(exemple%:%«%Chat%»%dans%«%Chats%et%chiens%»).%

•  chu+t%:%correspond%à%%%%%%«%chut%»,%«%chuut%»,%«%chuuut%»,%etc.,%n’importe%où%dans%le%texte.%

•  a[ou]+%:%correspond%à%%%%%%%%«%aou%»,%«%ao%»,%«%auuu%»,%«%aououuuoou%»,%etc.,%n’importe%où%dans%le%texte.%

•  peu[xt]?%:%correspond%à%%%%%%%%%«%peu%»,%«%peux%»%et%«%peut%»%%%%%%%%(et%seulement%à%ces%chaînes%,%n’importe%où%dans%le%texte.%%%%%%%%%%%La%recherche%retourne%le%texte%le%plus%long%possible%%%%%%%%%%%%%%%%%en%cas%d’occurrences%mulEples%à%la%même%posiEon).%

•  ^[st]ac%:%représente%les%chaînes%«%sac%»%et%«%tac%»%en%début%de%ligne.%•  [st]ac$%:%représente%les%chaînes%«%sac%»%et%«%tac%»%%

%%%%%%%en%fin%de%ligne%ou%de%texte%(par%exemple%à%l'intérieur%de%«%ressac%»).%•  ^trax$%:%représente%la%chaîne%«%trax%»%seule%sur%une%ligne.%%

Expressions*régulières*:*

exemples*de*$regex*

↪ voir http://fr.wikipedia.org/wiki/Expression_rationnelle!

Page 9: Aperçu de « APPingé2ICI-docdyn-diapCours1 … · ↪ voir  ... et

Exemple%:%pour%récupérer%les%valeurs%définies%pour%le%type%ENUM""%

Expressions*régulières*:*

en*mySQL**

↪ voir http://dev.mysql.com/doc/refman/5.0/en/columns-table.html!et http://dev.mysql.com/doc/refman/5.7/en/regexp.html! 1 = TRUE ; 0 = FALSE!

Exemple%:%pour%rechercher%des%valeurs%erronées%dans%une%table,%%comme%des%textes%qui%qui%conEennent%une%balise%<img%…%/>%dans%une%colonne%«%nom%»%%%

Expressions*régulières*:*

en*mySQL**

↪ voir http://dev.mysql.com/doc/refman/5.0/en/columns-table.html!et http://dev.mysql.com/doc/refman/5.7/en/regexp.html!