S'enregistrer | Rechercher | FAQ | Liste des Membres | Groupes d'utilisateurs | Connexion

  Nom d'utilisateur:    Mot de passe:       

  

Poster un nouveau sujet   Répondre au sujet Page 1 sur 1
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
MessagePosté le: Sam Sep 25, 2010 11:51 am    Sujet du message: PHP et injection sql quelles protection dans quel cas ? Répondre en citant

GOLGOTA
Projets


 
Inscrit le: 04 Aoû 2010
Messages: 23



Bonjour,

J'ai pour l'instant fini le gros de mon code de la première version de mon site.

Et là je m'intéresse très particulièrement à la sécurité.

Avec mes différentes petite recherches j'ai découvert plusieurs fonctions permettant de protégé des variables contre les injection sql. Mais je commence un peu à m'embrouiller.

addslashes()
stripslashes()
htmlspecialchars()
msql_real_escape_string()

Sont celles que je connais.

Si je contrôle les informations qui entrent dans la base de données, est-ce que je dois aussi contrôlée celle qui en sortent (donc qui sont affichées) ?

stripslashes() est pas mal pour viré les slash, mais prenons par exemple un formulaire de post de commentaire sur un article. Je dois contrôler le contenu, si je rajoute des slashe (avec addslashes() ) à l'entrée du script, mais que je les retires ensuite (avec stripslashes() ), cela pourrait activer un javascript par exemple ?

Je n'ai pas encore très bien compris ce que fait réellement htmlspecialchars(), est-ce qu'il rajoute ou enlève t-il des caractères ? (j'ai plus l'impression que c'est pour éviter de pouvoir mettre du code html, mais je n'en suis pas sûr).

Pour mysql_real_escape_string(), si j'ai bien compris je dois l'utiliser QUE pour contrôler les infos qui sont entrée dans un formulaire mis à disposition sur le site ?

Mais avec toutes ces fonction, je me perd un peu et je n'arrive pas Ă  savoir exactement dans quel cas les utiliser.

Donc pour préciser ma question :
Quelles fonctions dois-je préférer dans les deux cas suivant :

1. Lorsque l'utilisateur entre des données via un formulaire.
2. Lorsque je prend des infos de la base et qu'un code pourrait y ĂŞtre contenu.

Merci d'avance pour votre aide Smile

Golgota

EDIT : Bon après encore quelques recherches et quelques lectures en plus voici ce que j'en conclu (et dites moi si je me trompe) :

htmlspecialchars() : Change des caractères propre au html pour qu'ils soient lisible comme par exemple quand on prend un texte, dans une base de données, qui doit affiché le code pour qu'il soit lu. Donc ça évite d'executer du code.

addslashes() : Ajoute des anti-slash pour évité l'utilisation de caractère comme les ' ou les " . Donc ça permet d'éviter une injection sql.

mysql_real_escape_string() : Permet d'empecher l'utilisation de chaînes de caractères comme NULL, \x00, \n, \r, \, ', " et \x1a. Empêche les injection sql.

et enfin stringslashes() : Enlève les anti-slash dans une chaine de caractères.

Donc si j'ai bien compris :
htmlspecialchars(), addslashes() et mysql_real_escape_string() sont à appliquées lors de l'envoie de donnée dans la base de données. Et ce pour éviter d'injecter du code.

Et addslashes() doit être utilisé lors de l'affichage des données pour éviter d'avoir des anti-slash dès qu'on veut afficher des phrase avec des ' ou des " .

VoilĂ , me trompes-je ? Very Happy
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Sam Sep 25, 2010 2:52 pm    Sujet du message: Répondre en citant

GRIMMJOWBO
Modérateur


 
Inscrit le: 07 Mai 2010
Messages: 778
Localisation: France



Non tu ne trompes pas Smile . Tu vois en cherchant, tu n'a pas eu besoin d'aide.

P.S: addslashes ne sert à rien si get_magic_quotes_gpc est activé. Utilise get_magic_quotes_gpc, mysql_real_escape_string et htmlspecialchars(). mysql_real_ecape_string est utilisé lors de l'envoie d'une requête sql et htmlspecialchars() est souvent utilisé dans les echo.
A+ Wink
Voir le profil de l'utilisateur Envoyer un message privés Messagerie InstantanĂ©e MSN Messenger
MessagePosté le: Sam Sep 25, 2010 3:15 pm    Sujet du message: Répondre en citant

GOLGOTA
Projets


 
Inscrit le: 04 Aoû 2010
Messages: 23



Question bĂŞte, mais j'utilise PDO pour la gestion du sql.
Et je viens de tomber sur ça :
http://fr.php.net/manual/fr/pdo.prepared-statements.php

Il y est dit que PDO gère la protection contre les attaque SQL.

Donc plus besoin de mysql_real_escape_string ou get_magic_quotes_gpc ?
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Sam Sep 25, 2010 3:33 pm    Sujet du message: Répondre en citant

GRIMMJOWBO
Modérateur


 
Inscrit le: 07 Mai 2010
Messages: 778
Localisation: France



"Si votre application utilise exclusivement les requêtes préparées, vous pouvez être sûr qu'aucune injection SQL n'est possible (Cependant, si vous construisez d'autres parties de la requête en vous basant sur des entrées utilisateurs, vous continuez à prendre un risque)."
VoilĂ  Wink
Voir le profil de l'utilisateur Envoyer un message privés Messagerie InstantanĂ©e MSN Messenger
MessagePosté le: Sam Sep 25, 2010 3:52 pm    Sujet du message: Répondre en citant

GOLGOTA
Projets


 
Inscrit le: 04 Aoû 2010
Messages: 23



Donc l'utilisation de msql_real_escape_string est inutile, mais je dois toujours protégé les variable avec addslashes() et htmlspecialchars () ?
Dans cet exemple repris sur la page du lien vers la doc php :
Code:

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

Il est dit :

Citation:
Cet exemple récupère des données basées sur la valeur d'une clé fournie par un formulaire. L'entrée utilisateur est automatiquement échappée, il n'y a donc aucun risque d'attaque par injection SQL.

Il n'utilise pas mysql_real_escape_string.
Donc effectivement, PDO se charge d'une partie de la sécurisation contre les inejection SQL, mais le programmeur doit quand même veiller à protéger ses variables.
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Sam Sep 25, 2010 3:56 pm    Sujet du message: Répondre en citant

GRIMMJOWBO
Modérateur


 
Inscrit le: 07 Mai 2010
Messages: 778
Localisation: France



GOLGOTA a écrit:
mais le programmeur doit quand même veiller à protéger ses variables.

Evidemment! Je répond en vitesse car j'ai pas trop le temps mais htmlspecialchars()doit être utilisé pour éviter la xss par exemple ça n'a rien à voir avec l'injection sql.
A+ Wink
Voir le profil de l'utilisateur Envoyer un message privés Messagerie InstantanĂ©e MSN Messenger
Poster un nouveau sujet   Répondre au sujet Page 1 sur 1

  


 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum



110251 Attacks blocked