mehdi7604
Messages postés118Date d'inscriptionjeudi 11 mai 2006StatutMembreDerniè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és2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 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és1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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és30Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 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és55Date d'inscriptionmercredi 15 octobre 2003StatutMembreDerniè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és1044Date d'inscriptionlundi 7 mars 2005StatutMembreDernière intervention13 juillet 20107 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és30Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 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és1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 23 sept. 2008 à 13:54
Pdo->prepare ($SQL_Frauduleux_(Ou_pas)); Ca marche très bien ! :)
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 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.
24 sept. 2008 à 12:13
24 sept. 2008 à 10:31
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.
24 sept. 2008 à 09:47
Il faut voir les expressions régulières comme la toute dernière solution dans un problème. Pas la première.
24 sept. 2008 à 09:21
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.
23 sept. 2008 à 23:34
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();
23 sept. 2008 à 19:27
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%.
23 sept. 2008 à 18:29
@ tchaOo°
23 sept. 2008 à 14:18
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.
23 sept. 2008 à 13:54
23 sept. 2008 à 13:02