INHIBEUR D'INJECTIONS SQL

webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 23 sept. 2008 à 13:02
mehdi7604 Messages postés 118 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 6 mars 2015 - 24 sept. 2008 à 12:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48024-inhibeur-d-injections-sql

mehdi7604 Messages postés 118 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 6 mars 2015
24 sept. 2008 à 12:13
Tu veux dire que l'utilisationdes methodes definits par php ne fait rien si on transmet une valeur codée en hexa ?
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
24 sept. 2008 à 10:31
Salut,

Boucler sur un tableau pour appliquer une regex à chaque élément est vraiment absurde, de toute façon : preg_replace peut prendre un tableau en paramètre...

Bref... cette source n'a pas vraiment lieu d'être, de toute façon... Une lecture attentive de la doc PHP de l'extension MySQL aurait évité de la poster.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
24 sept. 2008 à 09:47
Le problème avec les expressions régulières, c'est qu'elles sont lourde à manipuler. Faire une boucle sur la variable $_REQUEST pour se protéger des attaques xss risque de faire monter le serveur en charge inutilement (s'il y a beaucoup de visiteurs) alors que d'autres moyens existent et sont plus simple à mettre en place.

Il faut voir les expressions régulières comme la toute dernière solution dans un problème. Pas la première.
cs_8Tnerolf8 Messages postés 30 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 novembre 2009
24 sept. 2008 à 09:21
Bonjour Willeraser

Je ne comprends pas la relation de la fonction que tu as inclus dans ton commentaire avec mon script, sachant que ton masque n'est pas correct.
Exemple : echo preg_replace("/[^A-Z_a-z0-9-\.&=]/i",'', "C'était le temps béni de la "Rengaine""); donnera
CtaitletempsbnidelaRengaine, ce qui est loin de la valeur initiale.

Et, si on adapte un masque avec [[:alpha:]], cela prendra bien les caractères propres à la langue de Molière, ainsi que les apostrophes et les guillemets, ce qui nous fera retomber dans la problématique précédente.

Eclairé par toutes les informations que vous avez tous fourni, et disposant de mon propre serveur, je vais faire passer toutes mes transaction SQL via PDO.
willeraser Messages postés 55 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 6 mai 2009
23 sept. 2008 à 23:34
j'adore le titre de ta source :))

function purge()
{
foreach ($_REQUEST as $key => $val)
{
$val = preg_replace("/[^_A-Za-z0-9-\.&=]/i",'', $val);
$_REQUEST[$key] = $val;
}
}
et sinon, comme certains te l'ont dit : mysql_real_escape_string();
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
23 sept. 2008 à 19:27
Le seul principe à retenir pour les injections SQL c'est qu'il faut séparer la requête des données qui sont envoyées. PDO c'est une des excellentes solutions, mais ce n'est pas accessible sur tous les serveurs.

Pour la méthode addslashes, c'est à éviter au plus au point à cause du fait qu'elle ne supporte pas certains encodages complexe comme il le faut. Il faut utiliser mysql_real_escape_string, c'est la seul fonction fiable à 100%.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
23 sept. 2008 à 18:29
Et si tu ne veux pas utiliser PDO, comme l'a dit webdeb, mysql_real_escape_string() suffit... .. . ;o)

@ tchaOo°
cs_8Tnerolf8 Messages postés 30 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 17 novembre 2009
23 sept. 2008 à 14:18
Merci à tous deux pour vos commentaires.
Ne m'étant pas encore penché sur la classe PDO, j'ai fait avec mes connaissances reliées à la bibliothèque MySQL.
Après parcours du manuel php, je m'aperçois en effet que les fonctions que vous décrivez allient sécurité et portabilité.
Je vais donc me pencher de plus près sur l'implémentation et l'utilisation de cette classe.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
23 sept. 2008 à 13:54
Pdo->prepare ($SQL_Frauduleux_(Ou_pas)); Ca marche très bien ! :)
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
23 sept. 2008 à 13:02
L'utilisation de mysql_real_escape_string(), de la méthode quote() de l'objet PDO ou bien encore les requêtes préparées suffisent à se protéger contre les injections sql.
Rejoignez-nous