Bonjour/Bonsoir tout le monde.
Je développe actuellement un mini site de musique en ligne en HTML5/CSS3, tout cela avec la technologie avec Ajax pour récupérer les données.
je propose de créer sa chaîne pour créer ses propres playlists.
Posons concrètement la situation.
-Moi, je possède l'ID 4 dans la base de données.
-Mon amis possède l'ID 5 dans la base de données.
Lors du clique sur "MES PLAYLISTS", une fonction onclick avec comme paramètre l'ID de session (4 pour moi) est passé à la fonction de manière à comme vous vous en doutez, afficher les playlists de l'utilisateur en cours. Jusque là, vous me suivez hein ?
Bon les playlists d'affiche bien et les fonctions joue bien leur rôles (aucun soucis la dessus).
Mais alors où est mon problème ?
Accrochez vous, c'est très loufoque : Lors du clique sur la playlist qui porte l'ID 5 par exemple dans la base de données, je recharge ma page (car j'ai déjà cerné le problème), et la magique ! J'inspecte mon bouton playlist qui passe en paramètre l'ID de session et je vois :
afficher_playlist('5');
Alors que mon vrai ID est le 4, je me retrouve avec l'ID 5 (celui de la playlist 5). Et cela ce pose avec n'importes quelles playlists. Si je clique sur la 7, je me retrouve avec l'ID de session 7. Cela permet donc, de se retrouver sur la session d'un autre !
Grosse faille de sécurité et surtout incompréhension car jamais ne donne d'autre valeur à mon $_SESSION['id'].
Voilà les lignes de code (au cas où):
Fonction appelée lors du clique sur une playlist :
Le fichier afficher_titre_playlist.php appelé par la fonction Ajax :
Le traitement du fichier à la rigueur ça importe peu, c'est juste pour voir que j'utilise l'ID de session.
Enfin bon, c'est juste ici, et nul part ailleurs que le problème ce pose.
Je possède l'ID 4, je clique sur la playlist avec l'ID 7 dans la base de données... et je me retrouve avec l'ID 7, du coup je ne suis plus sur mon compte, et si le compte avec l'ID 7 n'existe pas, je n'ai plus rien, ou sinon je me retrouve sur le compte d'un amis.
Si quelqu'un voit le problème, car là, je m'arrache les cheveux.
Merci d'avance.
Modifié par Kikimagik (20 Dec 2012 - 19:15)
Je développe actuellement un mini site de musique en ligne en HTML5/CSS3, tout cela avec la technologie avec Ajax pour récupérer les données.
je propose de créer sa chaîne pour créer ses propres playlists.
Posons concrètement la situation.
-Moi, je possède l'ID 4 dans la base de données.
-Mon amis possède l'ID 5 dans la base de données.
Lors du clique sur "MES PLAYLISTS", une fonction onclick avec comme paramètre l'ID de session (4 pour moi) est passé à la fonction de manière à comme vous vous en doutez, afficher les playlists de l'utilisateur en cours. Jusque là, vous me suivez hein ?

Bon les playlists d'affiche bien et les fonctions joue bien leur rôles (aucun soucis la dessus).
Mais alors où est mon problème ?
Accrochez vous, c'est très loufoque : Lors du clique sur la playlist qui porte l'ID 5 par exemple dans la base de données, je recharge ma page (car j'ai déjà cerné le problème), et la magique ! J'inspecte mon bouton playlist qui passe en paramètre l'ID de session et je vois :
afficher_playlist('5');
Alors que mon vrai ID est le 4, je me retrouve avec l'ID 5 (celui de la playlist 5). Et cela ce pose avec n'importes quelles playlists. Si je clique sur la 7, je me retrouve avec l'ID de session 7. Cela permet donc, de se retrouver sur la session d'un autre !

Grosse faille de sécurité et surtout incompréhension car jamais ne donne d'autre valeur à mon $_SESSION['id'].
Voilà les lignes de code (au cas où):
Fonction appelée lors du clique sur une playlist :
function afficher_titre_playlist(id_playlist,nom)//Paramètre(ID_de_playlist,NOM_de_playlist)
{
var id=id_playlist;
var xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
document.getElementById('titre_barre_titre').innerHTML = "Playlist "+nom;
document.getElementById('liste_titre').innerHTML = xhr.responseText;
}
else{
document.getElementById('titre_barre_titre').innerHTML = "Loading...";
}
}
xhr.open("POST", "afficher_titre_playlist.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("id="+id+"&nom="+nom);
}
Le fichier afficher_titre_playlist.php appelé par la fonction Ajax :
<?php
session_start();
header("Content-Type: text/html; charset=iso-8859-1");
include('connect.php');
$id=$_POST['id'];
$nom=$_POST['nom'];
$_SESSION['playlist'] = array();
$sql="SELECT * FROM musics_playlist WHERE id_playlist='$id'";
$res=mysql_query($sql);
$i=0;
echo "<ul style='float:left;'>";
while($curseur=mysql_fetch_array($res))
{
$fichier=$curseur[1];
$_SESSION['playlist'][]=$fichier;
echo "<li id='".$i."'>";
if(isset($_SESSION['membre'])||($_SESSION['membre']))
{
echo "<div onclick=supprimer_music_playlist('".$curseur[0]."','".$curseur[1]."'); id='supprimer'></div>";
}
echo "<input style='display:none;' id='musique".$i."' value='".$curseur[1]."' />";
echo "<a onclick=jouer_titre('".$fichier."',".$i.");>";
$fichier=str_replace("_", " ",$fichier);
$fichier=str_replace(".mp3", "",$fichier);
$fichier=str_replace(" and ", " & ",$fichier);
$fichier=str_replace(" And ", " & ",$fichier);
$pos_start=strrpos($fichier, "/");
$pos_end=strlen($fichier);
$fichier = substr($fichier, $pos_start+1, $pos_end);
echo "<h3>".$fichier."</h3>";
echo "</a></li>";
$i=$i+1;
}
echo "</ul>";
?>
Le traitement du fichier à la rigueur ça importe peu, c'est juste pour voir que j'utilise l'ID de session.
Enfin bon, c'est juste ici, et nul part ailleurs que le problème ce pose.
Je possède l'ID 4, je clique sur la playlist avec l'ID 7 dans la base de données... et je me retrouve avec l'ID 7, du coup je ne suis plus sur mon compte, et si le compte avec l'ID 7 n'existe pas, je n'ai plus rien, ou sinon je me retrouve sur le compte d'un amis.
Si quelqu'un voit le problème, car là, je m'arrache les cheveux.
Merci d'avance.
Modifié par Kikimagik (20 Dec 2012 - 19:15)