Faire une requête en fonction de l'id du membre

Répondre
LupusMic
le 04/08/2008 à 00:52
LupusMic
(Nono42) Il n'y a que les boulets qui disent que ça ne marche pas smiley
Si ça ne marche pas, il y a un message d'erreur, s'il y a une message d'erreur, ce serait sympa de l'indiquer.

(Sammuel) $_SESSION est issue d'une source non-sûre, il faut donc sécuriser la donnée avec mysql_real_escape[/function].
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Sammuel
le 04/08/2008 à 02:09
Sammuel
Vu que tu créé $_SESSION['login'] après avoir vérifié que le compte existe bien via une requête SQL, comment pourrait t'elle être non-sûre ?

$req = mysql_query("SELECT login FROM user WHERE login = '".mysql_real_escape($_POST['login'])."' AND password = '".mysql_real_escape($_POST['password'])."'");
$row = mysql_fetch_assoc($req);

// VERIFIE SI LE COMPTE EXISTE ...
// ET SIL EXISTE ON CREE UNE VARIABLE DE SESSION "LOGIN"

$_SESSION['login'] = $row['login'];


$row['login'] étant une valeur provenant de la BDD et vérifiée via la requête , comment pourrait t'elle être non-sûre ?

Au départ, j'ajouté des mysql_real_escape devant $_SESSION dans mes requêtes, mais après avoir posté un message sur ce forum, on m'a dit que ce n'était pas nécessaire ^^
Keika
le 04/08/2008 à 03:50
Keika
Je crois qu'il dit ca parceque les variables globales de session peuvent etre creees depuis un autre site et injectees dans le tiens. Donc si tu fais une requete sans echapper cette variable, des personnes mal intentionnees pourrait, par exemple, utiliser ton login admin et modifier ce qu'ils veulent...
Le PHP --> C'est dur !
LupusMic
le 04/08/2008 à 05:20
LupusMic
Pas vraiment Keika. En fait c'est plus vicieux que ça.

Premièrement, le nom d'utilisateur peut être « Al'fred » :) Et il vaut mieux ne pas faire de supposition sur le nom d'utilisateur plutôt que de se retrouver avec des bogues étranges.

Deuxiement, Sammuel, tu te places dans le script de connexion. Ici il serait effectivement malheureux que la donnée dans le tableau de session ne soit pas fiable, puisque tu es sensé l'avoir validé. Le problème, c'est qu'à la visite suivante, tu ne vérifie pas le login, car le login est en session. À ce moment là, les données en session peuvent très bien avoir été alterées suivant le backend que tu utilises. Surtout si tu es sur un serveur mutualisé, où tu aurais un méchant voisin qui écrit dans ton fichier de session pour te faire une mauvaise blague.

Enfin bref, il faut faire les choses au bon endroit. Les données doivent être sécurisée avant d'être soumise, pas en prévision d'être soumises. Ce serait comme appliquer htmlentities sur une donnée insérée en base de données : c'est un non-sens.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Nono42
le 04/08/2008 à 11:01
Nono42
Salut,
Oui moi être petit boulet smiley
Mais heu... j'suis perdu là: le code que m'a donné Sammuel est correct, aucune erreur. En parlant d'erreur, le code que tu m'a donné LupusMic: l'erreur disait Fatal Error (sérieux ça smiley smiley )
Donc avec ce que je vient de lire le code de Samuel n'est pas sécurisé. Mais comment je le sécurise moi ??

Merci d'avance
@++
Sammuel
le 04/08/2008 à 11:39
Sammuel
Comme ça :

$score = mysql_query("SELECT score FROM membre WHERE login = '".mysql_real_escape_string($_SESSION['login'])."'");


smiley
Nono42
le 04/08/2008 à 13:49
Nono42
Salut,
Alors ça marche ! Merci à tous ceux qui m'ont aidé (et donc poster dans ce sujet ) smiley
@++
LupusMic
le 05/08/2008 à 02:51
LupusMic
C'était quoi l'erreur fatale ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours