Page 1 sur 2

SQL Procédural -> Sécurisation

Posté : 09 avr. 2010, 08:39
par Dr@ke
En procédural, contre les injections SQL il existe la fonction mysql_real_escape_string() mais on peut renforcer la sécurité en utilisant les variables SQL.

Exemple:
$email = mysql_real_escape_string($email); // Pour MYSQL
$password = mysql_real_escape_string($password); // Pour MYSQL

$email = mysqli_real_escape_string($email); // Pour MYSQLI
$password = mysqli_real_escape_string($password); // Pour MYSQLI

$requete1 = "SELECT @email := '$email', @pass := '$password'";
$requete2 = "SELECT `email` FROM `table` WHERE `email` = @email AND `password` = @pass";
En attendant de passer à la programmation objet :)

Re: SQL Procédural -> Sécurisation

Posté : 19 avr. 2010, 23:42
par Gofromiel
Je pense qu'il est surtout grand temps de passer à PDO à moins d'être encore dans PHP4 jusqu'au cou.
$query = $db->prepare('SELECT email FROM `table` WHERE email = ? AND `password` = ?');
var_dump($query->execute(array($email, $pasword)->fetchAll());
Adieu *real_escape_string ! Tu peux aller te reposer au côté de magic_quotes, addslash() et autres horreurs. Sans rancunes.

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 03:17
par AB
A noter qu'en mode procédural mysqli_real_escape_string() doit avoir deux paramètres dont le premier est un identifiant de lien retourné par la fonction mysqli_connect() ou par la fonction mysqli_init() et le second est la chaîne de caractères à échapper. Et c'est le même principe pour mysqli_query().

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 11:51
par Dr@ke
Je pense qu'il est surtout grand temps de passer à PDO à moins d'être encore dans PHP4 jusqu'au cou.
Sans rancunes.
Oui oui , on connait PDO, merci :wink:

Mais le sujet est SQL procédural.

D'ailleurs le terme exact serait surtout les requêtes préparées au lieu de simplement parler de PDO.

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 13:26
par stealth35
Je pense qu'il est surtout grand temps de passer à PDO à moins d'être encore dans PHP4 jusqu'au cou.
Sans rancunes.
Oui oui , on connait PDO, merci :wink:

Mais le sujet est SQL procédural.

D'ailleurs le terme exact serait surtout les requêtes préparées au lieu de simplement parler de PDO.
ouai, en procédural on peux aussi faire des requête préparer autant avec mysql qu'avec mysqli :wink:

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 17:35
par Gofromiel
Pardon :oops: ça me fait toujours de la peine quand on parle de vieux machins. PDO FTW ! ;-)

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 17:47
par stealth35
mysqli est plus complet que PDO_MYSQL

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 19:18
par Gofromiel
Complet ? Comme quoi ?

Ce que j'aime chez PDO c'est évidement son orientation objet, mais surtout l'abstraction des toutes ces vilaines API avec lesquelles ont devait autrefois jongler. J'utilise deux types de base de données dans mon CMS (MySQL et SQLite) et je suis bien content de pas avoir à me soucier de l'API, c'est la même pour tout le monde (même s'il faut un peu de magie pour les requêtes...).

Ho, regardes, tu me fais parler de PDO ;-)

PS: Et les exceptions ! On ne parle pas assez des exceptions.

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 19:39
par AB
PS: Et les exceptions ! On ne parle pas assez des exceptions.
Sans doute parce que mysql est tellement performant que ça marchait pratiquement aussi bien avant :wink:
et surtout la gestion des erreurs peut se faire autrement.

Je te rejoins pour dire que l'énorme avantage de PDO est de pouvoir changer assez facilement de type de bdd,
mais pour le reste, sans rentrer dans la polémique, pour un usage courant y'a pas de quoi sauter au plafond :)

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 20:16
par dunbar
Je pense qu'il est surtout grand temps de passer à PDO à moins d'être encore dans PHP4 jusqu'au cou.
$query = $db->prepare('SELECT email FROM `table` WHERE email = ? AND `password` = ?');
var_dump($query->execute(array($email, $pasword)->fetchAll());
Adieu *real_escape_string ! Tu peux aller te reposer au côté de magic_quotes, addslash() et autres horreurs. Sans rancunes.
Salut,
Sauf erreur de ma part, cette technique est plus sûre que celle proposer par dr@ke, cependant toutes les interfaces de base de donnée n'en disposent pas et donc il faudra utiliser la méthode de dr@ke ou utilisé des procédure stockées.
De plus ta technique à un impact non négligeable sur les performance surtout quand la requête n'est utiliser qu'une seule fois.
Non seulement le code php est plus long, mais en plus la séparation de la préparation et l'exécution de celle-ci coûte plus cher au serveur.

A+ :)

Re: SQL Procédural -> Sécurisation

Posté : 20 avr. 2010, 20:52
par stealth35
Complet ? Comme quoi ?
mysqli est full compatible mysql > 4.1, et a le droit a la gestion des statistiques avec mysqli_get_cache_stats(), mysqli_get_client_stats(), mysqli_get_connection_stats()

Re: SQL Procédural -> Sécurisation

Posté : 27 avr. 2010, 10:48
par Gofromiel
Tu veux dire que tu peux utiliser des fonctions non documentées totalement obscures ? ;-)

Re: SQL Procédural -> Sécurisation

Posté : 27 avr. 2010, 10:52
par stealth35
Tu veux dire que tu peux utiliser des fonctions non documentées totalement obscures ? ;-)
t'es anglophobe ?
sinon ta le droit aux requêtes multiples aussi avec mysqli_multi_query :wink:

Re: SQL Procédural -> Sécurisation

Posté : 27 avr. 2010, 11:48
par macgawel
Tu veux dire que tu peux utiliser des fonctions non documentées totalement obscures ? ;-)
t'es anglophobe ?
Même en étant anglophone, ça reste des fonctions non documentées :
Page PHP sur mysqli_get_client_stats()
This function is currently not documented; only its argument list is available.
#-o

Re: SQL Procédural -> Sécurisation

Posté : 27 avr. 2010, 12:49
par Dr@ke
Tout ceci est hors-sujet :roll:

Ce n'est tout de même pas compliqué de comprendre que le sujet est la sécurisation d'une requête Mysql en mode procédural...
Le titre du sujet ainsi que son introduction sont pourtant, d'après moi, plutôt claires.

J'ai mis cette information car je la trouvais intéressante et peu documentée sur le net.

Cette information ne vient d'ailleurs pas de moi mais de mes lectures, et pour être précis dans le livre:
http://www.amazon.fr/Securite-PHP-MySQL ... 212121148/

J'en ai profité pour en faire un petit exemple plus concret.

Donc le sujet n'est pas quelle est la meilleur méthode à utiliser, mais juste:
Voici une méthode intéressante et peu connue...