Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-05-2008 15:17:11

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Sécurité : échappement et encodage des caractères

Bonjour à tous !

Je n'ai pas encore la culture ZF, et en ce qui concerne la sécurité, j'aurais plutôt tendance à faire du mysql_real_escape_string(), htmlentities(), stripshlashes() etc etc...
Je sais que dans ZF, beaucoup de ces techniques redondantes peuvent être évitées grâce à ses composants. Cependant, je ne les connais pas tous, alors je préfère demander !

Par exemple, les données GET et POST, quels traitement leur faire subir avant toute utilisation ? Avant un stockage en base de données ?

Et les données récupérées en bdd (ou autre média de stockage, genre xml, fichier...), quel traitement leur faire subir avant leur affichage ?

Ce ne sont que deux questions parmi d'autres. Mon interrogation est plus générale en fait : comment gérer convenablement la sécurité des données avec Zend Framework ?

Merci d'avance pour vos conseils !

Hors ligne

 

#2 05-05-2008 15:33:11

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Sécurité : échappement et encodage des caractères

perso, les données en GET et POST passent de toute facon dans un filtre+ validateur, qui échappe automatiquement les valeurs wink

Hors ligne

 

#3 05-05-2008 15:38:32

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: Sécurité : échappement et encodage des caractères

Un petit développement serait le bienvenu smile

Hors ligne

 

#4 05-05-2008 17:09:02

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Sécurité : échappement et encodage des caractères

La vérification des formulaires avec le ZF est facilitée(quand on sait enfin l'utiliser big_smile ) grace aux filtres et validateurs , et par Zend_Filter_Input, qui regroupe les deux smile

En gros ca te permet de définir des outils qui seront appliqués sur tes champs envoyés via GET ou POST.

Lors du passage dans un filtre(ou validateurs je sais plus), les valeurs du champs sont automatiquement échappés(un htmlentities/addslashes par défaut il me semble(une option permet de définir un adaptateur par défaut)

Hors ligne

 

#5 05-05-2008 17:20:02

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Sécurité : échappement et encodage des caractères

Bonjour Bast,

Tu as effectivement les filtres et validateurs à utiliser (cf les autres messages). Par contre pour les échappements liés à la base de données, tu n'as théoriquement moins à t'en occuper. Si tu utilises Zend_Db, les fonctions insert ou save font tous les échappements nécessaires avant l'insertion ou la mise à jour.

Tu peux encore avoir des injections SQL avec les select ou les where. Regarde du coté de quote et quoteInto pour voir comment le ZF traite le problème. Dans tous les cas, ça se passe dans Zend_Db et éventuellement Zend_Db_Select, Zend_Db_Table,...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 06-05-2008 09:24:50

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: Sécurité : échappement et encodage des caractères

Ok donc comme je m'en doutais, aucune fonction de sécurité à utiliser, mais uniquement des outils ZF.
Ca ne m'étonne pas smile

Donc si j'ai bien compris :
- Pas besoin de se préoccuper de la sécurité lors d'un insert ou update. C'est déjà ça.
- Pour les select / champs de formulaire que je réaffiche (c a d les données directement saisies par un user), j'utilise le quoteinto ?
- Pour un affichage de données venant de la base, quoteinto aussi ?
- Le quote / quoteinto remplace le htmlentities() indispensable à tout affichage ?
- J'oublie quelque chose ?

PS : merci pour vos réponses !

Dernière modification par Bast (06-05-2008 09:25:09)

Hors ligne

 

#7 06-05-2008 09:55:42

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Sécurité : échappement et encodage des caractères

Fais gaffe, il faut bien comprendre ce que tu fais quand même. Il y a plusieurs types de problèmes possibles. A mon avis voilà les 2 pires :
- les injections SQL
tu demandes un login et passwd sur une page. Le mec au lieu d'entrer un login, il met la chaine suivante :

Code:

toto'; delete from users;

toi dans ton code, tu as un select * from users where login='$login'; là ton $login se transforme et fait :

Code:

select * from users where login='toto';delete from users;';

Donc là, joie, bonheur, le mec vient d'effacer ta table d'utilisateurs... (ça donne le principe, je ne sais pas si ce code en particulier fonctionne...).
Les quote et quoteInto servent à éviter ce genre de problème...

- les XSS (cross site scripting)
dans un forum, un mec entre le message :

Code:

<script>
window.onload=function(){
  // j'envoie en js le cookie de session du gars à une URL à moi (à travers une iframe par exemple)
}
</script>
mon super message

quand le message du forum est lu par les autres internautes, les internautes voient juste "mon super message", par contre leur id de session est envoyée à une URL, donc celui qui a écrit le message peut piquer la session d'un autre...

Dans ce cas, pour les XSS, ca N'EST PAS quote et quoteInto. Il faut valider le message envoyé avec les valids et les filters (regarde notamment du coté de Zend_Filter_StripTags) et effectivement htmlentities() dans certains cas.

Donc attention : pas de recette toute faite, il faut bien voir où est le problème et apporter la solution adaptée. parfois tu pourras utiliser htmlentities pour l'affichage, mais parfois tu ne pourras pas parce qu'il faudra quand même envoyer un bout du texte en gras ou une liste à coup de ul/li...

- Conclusion

Bref 2 conseils :
- bien comprendre où sont les failles (j'en ai mis 2 terribles ici, mais y'en a d'autres... je pense que c'est les 2 pires cela dit !)
- être parano

Une fois qu'on est parano et stressé, le ZF apporte quelques fonctions qui allègent un peu la vie du parano... (celà dit si vous faites des sites en série, ne rêvez pas, vous vous ferez forcément hacker un site un jour...)

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#8 06-05-2008 10:58:12

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Sécurité : échappement et encodage des caractères

philippe a écrit:

- les injections SQL
tu demandes un login et passwd sur une page. Le mec au lieu d'entrer un login, il met la chaine suivante :

Code:

toto'; delete from users;

toi dans ton code, tu as un select * from users where login='$login'; là ton $login se transforme et fait :

Code:

select * from users where login='toto';delete from users;';

Donc là, joie, bonheur, le mec vient d'effacer ta table d'utilisateurs... (ça donne le principe, je ne sais pas si ce code en particulier fonctionne...).

Non, ca marche pas, il y un quote seul à la fin, tu auras une erreur.

Code:

select * from users where login=$login;

Avec ca, oui, pas de problème si on entre toto; delete from users

Code:

select * from users where login=toto; delete from users;

ou alors

Code:

select * from users where login='$login';

si on entre toto'; delete from 'users

Code:

select * from users where login='toto'; delete from 'users';

Ne pas oublié qu'il faut pouvoir gérer l'insertion des quotes dans les champs.
Par exemple, un utilisateur qui s'apelle   "jean d'azincourt"


----
Gruiiik !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages