JeuWeb - Crée ton jeu par navigateur
sécurité blind injection sql - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : sécurité blind injection sql (/showthread.php?tid=6955)

Pages : 1 2 3


sécurité blind injection sql - hercull - 01-09-2013

Bonjour après de longues recherches je m'aperçois que mon site à apparemment des failles de type blind injection sql, j'ai beau chercher je ne trouve pas comment faire afin de combler ses failles et de protéger mon site.
j’envoie une variable en GET exemple ...?id=1 et je le récupère en intval($variable), seulement cela ne semble pas suffire, j'ai entendu parler de mysql_real_escape_string à utiliser, mais je ne vois pas comment, je le met à la place du intval()? cela n'est pas uniquement pour les chaines de caractère?
Enfin après lecture je vois que mysql_real_escape_string est obsolète...
Si quelqu'un sait comment se protéger de cette faille à l'heure actuel il me serai d'un grand secoure.
Merci.


RE: sécurité blind injection sql - niahoo - 01-09-2013

utilises PDO ou un ORM basé dessus c'est le plus simple. Pour les nombres entiers, intval est suffisant normalement.


RE: sécurité blind injection sql - hercull - 01-09-2013

Peut tu être plus précis stp, tu veux dire que pour les requêtes au lieu de passer par mysql... je passe par PDO?
Cela permet de sécuriser et d’empêcher les injection sql blind?


RE: sécurité blind injection sql - niahoo - 01-09-2013

Tu utilises un serveur mysql mais tu utilises la librairie PDO pour y accéder

http://fr2.php.net/manual/fr/pdostatement.execute.php

exemple tiré de la doc :

<?php
/* Exécute une requête préparée en passant un tableau de valeurs */
$calories = 150;
$couleur = 'rouge';
$sth = $dbh->prepare('SELECT nom, couleur, calories
FROM fruit
WHERE calories < :calories AND couleur = :couleur');
$sth->execute(array(':calories' => $calories, ':couleur' => $couleur));
?>



RE: sécurité blind injection sql - hercull - 01-09-2013

donc si je met intval($variable) quand je la récupère et que je me connecte avec PDO au lieu de mysql_connect je n'ai plus a craindre les sinjection sql?


RE: sécurité blind injection sql - julp - 02-09-2013

Ce sont les requêtes préparées qui permettent d'éviter les injections (sous réserve de les utiliser correctement), pas PDO en lui-même, qui permet, heureusement de faire aussi des requêtes non-préparées (= échappements à faire soi-même via PDO::quote). Elles (les requêtes préparées) ne sont pas aussi propres à PDO, elles existent dans d'autres extensions à commencer par mysqli puisque c'est le SGBD (partie cliente) qui les implémente (PHP ne fait qu'interfacer les API clientes via ses extensions).

intval aussi n'a rien à voir, et j'aimerais bien savoir comment tu peux avoir une injection avec ?!?

Enfin, on peut toujours utiliser les fonctions mysql_* qui ne sont que dépréciées pour l'heure, de toute façon si ton appli utilise ces fonctions, tu n'as pas le choix : c'est migrer (mysqli ou PDO) ou échapper ce qui doit l'être avec mysql_real_escape_string. Mais ce n'est pas parce que tu passes à mysqli ou pdo que tu règles le problème non plus.


RE: sécurité blind injection sql - niahoo - 02-09-2013

oui dans le bout de code que j'ai donné tu as un exemple de requête avec paramètres, ce qui permet de les sécuriser.


RE: sécurité blind injection sql - Xenos - 02-09-2013

Pareil que Julp.

Coté sécurité, je te renvoie aussi au Top 10 de l'OWASP (2013). L'injection s'y trouve en tête de liste Wink
L'injection concerne tous les interprétateurs; généralement elle n'arrive que si on fait la "promotion" d'une valeur de l'utilisateur en une commande (c'est ce qui se passe quand on n'échappe pas une chaine ASCII par exemple: le guillemet entré par l'utilisateur termine la valeur, et le reste de ce que l'utilisateur a entré après le guillemet est considéré non plus comme une valeur mais comme une commande).

Pour ma part, j'interdis tout texte utilisateur (hors textes à white-list, aka pseudo, mail) dans ma base de données (que des nombres), mais c'est uniquement un choix personnel :p


RE: sécurité blind injection sql - Ter Rowan - 02-09-2013

(02-09-2013, 02:01 AM)julp a écrit : intval aussi n'a rien à voir, et j'aimerais bien savoir comment tu peux avoir une injection avec ?!?

oui moi aussi, je ne comprends pas


RE: sécurité blind injection sql - hercull - 02-09-2013

ok merci pour vos réponses, donc je vais utiliser une requête préparé.
mais la variable que je récupère en GET est un nombre puis je utiliser mysql_real_escape_string? j'avais plutôt pensé utiliser intval() est ce un mauvais choix?

" julp a écrit : intval aussi n'a rien à voir, et j'aimerais bien savoir comment tu peux avoir une injection avec ?!?

oui moi aussi, je ne comprends pas "


je n'ai pas compris la question?