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
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
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

Re: SQL Procédural -> Sécurisation
Posté : 20 avr. 2010, 17:35
par Gofromiel
Pardon

ç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
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

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 anglo
phone, ç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.

Re: SQL Procédural -> Sécurisation
Posté : 27 avr. 2010, 12:49
par Dr@ke
Tout ceci est hors-sujet
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...