Un peut de PHP SQL pour finir l'apres midi !
25 messages
• Page 1 sur 2 • 1, 2
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Un peut de PHP SQL pour finir l'apres midi !
Bonjour à tous, j'ai un soucis avec un bout de code, si quelqu'un peut me dépanner ou me donner une piste je l'en remercie je ne trouve vraiment pas de solutions..... je suis étudiant en 1 année donc je débute en dev ( je précise cela pour éviter tout jet de pierres
)
Il s'agit de mon projet de PTI, je tente cet apres midi de compléter avec une vérification via le SESSION l'acces à des pages réservé aux membres.
Via un IF et un ELSE, si l'utlistateurs est connecté alors j'affiche, sinon un message s'affiche.
Voici mon fichier "action" authentification, suivit du code de ma page réservé aux membres.
Je cherche également un moyen d'integrer du code html dans un if en php, j'ai tenté via des echo 'html'; mais c'est vraiment artisanale je pense !
En vous remerciant par avance !
Il s'agit de mon projet de PTI, je tente cet apres midi de compléter avec une vérification via le SESSION l'acces à des pages réservé aux membres.
Via un IF et un ELSE, si l'utlistateurs est connecté alors j'affiche, sinon un message s'affiche.
Voici mon fichier "action" authentification, suivit du code de ma page réservé aux membres.
Je cherche également un moyen d'integrer du code html dans un if en php, j'ai tenté via des echo 'html'; mais c'est vraiment artisanale je pense !
En vous remerciant par avance !
- Code: Tout sélectionner
<?php
include_once ('../../cfg/connexion.cfg.php');
$login = $_POST['login']; //recuperation de login et mdp
$pwd = $_POST['pwd'];
$sql = "SELECT * FROM profils WHERE USERNAME='" . $login . "' AND MDP='" . $pwd . "';"; //selection du compte depuis la DB
$resultat = mysql_query($sql);
$ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
$login_valide = $ligne['USERNAME'];
$pwd_valide = $ligne['MDP'];
//echo $sql;
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd'])) {
// je vérifie les informations du formulaire
if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
//tout est ok on demarre la session
session_start ();
$_SESSION['auth'] = "ok";
$_SESSION['id'] = $ligne['IDPROFIL'];
//j'enregistre le visiteur dans des variable de session
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
header('location:../../index.php');
// je redirige le membre
} else {
// Visiteur inconnu
header('location:../../index.php');
}
}
?>
- Code: Tout sélectionner
<?php
if (!isset($_SESSION['login']) && !isset($_SESSION['pwd']) && $_SESSION['auth'] != "ok") {
echo "Vous devez êtres enregistré vous afficher ce contenu";
}
else {
?>
<div id="administrer">
<br />
<table border="0">
<tr><th>Ajouter un Profil :</th>
<th><a href="index.php?page=form/form_compte_ajouter_sc2&id=';<?php echo $_SESSION['id']; ?>">Starcraft II</a> - </th>
<th><a href="index.php?page=form/form_compte_ajouter_war3&id=<?php echo $_SESSION['id']; ?>">Warcraft III</a> - </th>
<th><a href="index.php?page=form/form_compte_ajouter_wow&id=<?php echo $_SESSION['id']; ?>">World Of Warcraft</a></th></tr>
</table>
<h1>TABLEAU PROVISOIR LISTAGE COMPTE</h1>
<br />
<br />
<table border="1">
<tr><th>Identifiant</th><th>Pseudo</th><th>mot de passe</th><th>Mail</th><th>Code Postal</th><th>Pays</th><th>Modifier</th><th>Supprimer</th></tr>
<?php
$resultat = "SELECT PR.IDPROFIL, PR.IDPAYS, P.LIBELLE, PR.USERNAME, PR.MDP, PR.EMAIL, PR.URL, PR.CODEPOSTAL FROM profils as PR, pays as P WHERE PR.IDPAYS=P.IDPAYS";
$result = mysql_query($resultat);
while ($ligne = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<td>";
echo $ligne['IDPROFIL'] . "</td>
<td> " . $ligne['USERNAME'] . "</td>
<td> " . $ligne['MDP'] . "</td><td> " . $ligne['EMAIL'] . "</td><td> " . $ligne['CODEPOSTAL'] . "</td>
<td> " . $ligne['LIBELLE'] . "</td>";
echo "<td> <a href=\"index.php?page=form/form_compte_modifier&id=" . $ligne['IDPROFIL'] . "\">Modifier</a></td>";
echo "<td> <a href=\"index.php?page=action/action_compte_suprimer&id=" . $ligne['IDPROFIL'] . "\">Supprimer</a></td></tr>";
}
echo "</table>";
echo "</div>";
}
?>
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
Tu sais que tu peux faire comme tu as fais plus haut, à savoir fermer la balise php et mixer avec du HTML :
- Code: Tout sélectionner
while ($ligne = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<td>
<?php echo $ligne['IDPROFIL']; ?></td>
...
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Re: Un peut de PHP SQL pour finir l'apres midi !
Oui, je te remercie ce problème semble résolu ! Mon soucis principal vient des pages réservé aux membres
Ai je bien fais mon fichier d'authentification, me conseillez vous autre chose ?
Ai je bien fais mon fichier d'authentification, me conseillez vous autre chose ?
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
Bein du coup ton problème n'est pas du tout clair. Quels problèmes tu rencontres ? As-tu bien mis un session_start() en en-tête de tes pages, avant toute sortie HTML ?
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Re: Un peut de PHP SQL pour finir l'apres midi !
J'avais effectivement oublié mon session_start en debut de page à vérouiller pour les utilisateurs non enregistrés. Après l'ajout et le test j'obtiens :
J'en déduis que la session est deja active.... mais je ne saurai pas interpréter au dela le pourquoi de cette erreur, si la session est bien lancé ( d'après le message d'erreur ) la partie situé dans mon if ne devrai pas s'afficher si je ne suis pas logué, helas elle s'affiche tout de même ....
Notice: A session had already been started - ignoring session_start() in C:\wamp\www\PTICITATION\pti\pages\form\form_compte_administrer.php on line 1
J'en déduis que la session est deja active.... mais je ne saurai pas interpréter au dela le pourquoi de cette erreur, si la session est bien lancé ( d'après le message d'erreur ) la partie situé dans mon if ne devrai pas s'afficher si je ne suis pas logué, helas elle s'affiche tout de même ....
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
Ce n'est pas parce que tu as activé les sessions sur une page que LA session que tu testes est définie. Tu as un session_start au début de la page où tu instancies tes variables de session ?
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Re: Un peut de PHP SQL pour finir l'apres midi !
La page ou j'instancie mes variables de connexion est mon premier quote je ne le lance que si le login récupere en $_POST est égal au login importé depuis la BD.
CODE COMPLET DU FICHIER DE CONNECTION
if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
//tout est ok on demarre la session
session_start ();
CODE COMPLET DU FICHIER DE CONNECTION
<?php
include_once ('../../cfg/connexion.cfg.php');
$login = $_POST['login']; //recuperation de login et mdp
$pwd = $_POST['pwd'];
$sql = "SELECT * FROM profils WHERE USERNAME='" . $login . "' AND MDP='" . $pwd . "';"; //selection du compte depuis la DB
$resultat = mysql_query($sql);
$ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
$login_valide = $ligne['USERNAME'];
$pwd_valide = $ligne['MDP'];
//echo $sql;
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd'])) {
// je vérifie les informations du formulaire
if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
//tout est ok on demarre la session
session_start ();
$_SESSION['auth'] = "ok";
$_SESSION['id'] = $ligne['IDPROFIL'];
//j'enregistre le visiteur dans des variable de session
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
header('location:../../index.php');
// je redirige le membre
} else {
// Visiteur inconnu
header('location:../../index.php');
}
}
?>
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
Et si tu fais un print_r($_SESSION) ;exit(); sur la page suivante, avant tout traitement (hormis le session_start bien sûr), tu as quelque chose qui s'affiche ?
- jamalofski
- WRInaute discret

- Messages: 219
- Inscription: 3 Mar 2007
Re: Un peut de PHP SQL pour finir l'apres midi !
injection sql ?!
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
jamalofski a écrit:injection sql ?!
Je répondais à la question initiale, mais en effet, niveau sécurisation, une requête qui intègre des variables $_GET / $_POST sans un minimum de sécurisation/nettoyage, c'est pas le top :/
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Re: Un peut de PHP SQL pour finir l'apres midi !
Je viens d'executer ce code dans mon fichier "action authentification" donc juste après la validation du formulaire de connexion et j'obtiens :
Donc j'en déduis que la session n'est pas encore définie avant la connexion de l'utilisateur ?
- Code: Tout sélectionner
Notice: Undefined variable: _SESSION in C:\wamp\www\PTICITATION\pti\pages\action\action_auth_connecter.php on line 3
Donc j'en déduis que la session n'est pas encore définie avant la connexion de l'utilisateur ?
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Re: Un peut de PHP SQL pour finir l'apres midi !
jamalofski a écrit:injection sql ?!
je suis étudiant en 1 année donc je débute en dev ( je précise cela pour éviter tout jet de pierres)
je ne peux pas tout apprendre d'un coup, j'ai deja du mal à gérer des session, pour la sécu je verai plus tard, deja comprendre la théorie "brute".
Le site n'est pas destiné à être mis en ligne...pour le moment
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
user2home a écrit:Je viens d'executer ce code dans mon fichier "action authentification" donc juste après la validation du formulaire de connexion et j'obtiens :
- Code: Tout sélectionner
Notice: Undefined variable: _SESSION in C:\wamp\www\PTICITATION\pti\pages\action\action_auth_connecter.php on line 3
Donc j'en déduis que la session n'est pas encore définie avant la connexion de l'utilisateur ?
Y'a pas de session_start avant le print_r ?
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
Bonjour
Je me trompe peut etre, mais il semble y avoir un souci de logique dans ton code de vérification login / password
jusque là presque ok, sauf que tu n'as pas vérifié que les variables existent et soient renseignées
donc ici forcement $pwd_valide== $pwd == $_POST['pwd'] et forcement $login_valide== $login == $_POST['login'], vu que ce sont les conditions exprimées dans ta requête SELECT
ca c'est à faire avant de lancer la requete, sinon erreurs SQL en vue
ce sera toujours valide, étant donné que ce sont forcément les mêmes valeurs (cf plus haut)
Mon conseil :
- verification que les login & pwd sont renseignées; sinon message d'erreur
- requete SQL sur la ligne basée sur le login seul - Si pas de résultat, connexion interdite
- stockage dans une variable de la valeur du pwd associée au login dans la base
- si il est identique au pwd envoyé par le formulaire, là tu connectes.
Et bien sur, sécuriser les variables récoltées du formulaire pour éviter les injections et autres tentatives de crackage
Je me trompe peut etre, mais il semble y avoir un souci de logique dans ton code de vérification login / password
- Code: Tout sélectionner
$login = $_POST['login'];
$pwd = $_POST['pwd'];
jusque là presque ok, sauf que tu n'as pas vérifié que les variables existent et soient renseignées
- Code: Tout sélectionner
$sql = "SELECT * FROM profils WHERE USERNAME='" . $login . "' AND MDP='" . $pwd . "';"; //selection du compte depuis la DB
$resultat = mysql_query($sql);
$ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
$login_valide = $ligne['USERNAME'];
$pwd_valide = $ligne['MDP'];
donc ici forcement $pwd_valide== $pwd == $_POST['pwd'] et forcement $login_valide== $login == $_POST['login'], vu que ce sont les conditions exprimées dans ta requête SELECT
- Code: Tout sélectionner
if (isset($_POST['login']) && isset($_POST['pwd'])) {
ca c'est à faire avant de lancer la requete, sinon erreurs SQL en vue
- Code: Tout sélectionner
if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) { //demarrage session
ce sera toujours valide, étant donné que ce sont forcément les mêmes valeurs (cf plus haut)
Mon conseil :
- verification que les login & pwd sont renseignées; sinon message d'erreur
- requete SQL sur la ligne basée sur le login seul - Si pas de résultat, connexion interdite
- stockage dans une variable de la valeur du pwd associée au login dans la base
- si il est identique au pwd envoyé par le formulaire, là tu connectes.
Et bien sur, sécuriser les variables récoltées du formulaire pour éviter les injections et autres tentatives de crackage
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Re: Un peut de PHP SQL pour finir l'apres midi !
Exemple d'injection sur ton code :
J'indique, dans le formulaire, pour le login, l'expression suivante :
test' OR 1=1"; et un mot de passe bidon
ce qui me fera le traitement suivant :
$sql = "SELECT * FROM profils WHERE USERNAME='test' OR 1=1"; ' AND MDP='bidon';";
et ensuite une requete sql
SELECT * FROM profils WHERE USERNAME='test' OR 1=1;
ce qui est toujours vrai (1 est toujours égal à 1) donc je me connecte à coup sur.
J'indique, dans le formulaire, pour le login, l'expression suivante :
test' OR 1=1"; et un mot de passe bidon
ce qui me fera le traitement suivant :
$sql = "SELECT * FROM profils WHERE USERNAME='test' OR 1=1"; ' AND MDP='bidon';";
et ensuite une requete sql
SELECT * FROM profils WHERE USERNAME='test' OR 1=1;
ce qui est toujours vrai (1 est toujours égal à 1) donc je me connecte à coup sur.
25 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Formation référencement
- L'assistant de recherche sur Yahoo! Search France
- Résultats des élections régionales 2010 sur Google Maps
- La balise d'URL canonique inter-sites
- 2 nouvelles journées d'étude Ranking Metrics
- Les meilleurs WRInautes en 2007
- Chercher des fichiers KML dans Google Earth
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
