Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2006, 15h48   #1
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
Par défaut [Sécurité] sécurité login password

Bonjour, je suis nouveau en conception de sites sécurisés et je voudrais avoir un avis d'expert...

Ma page d'accueil est un formulaire demandant login et password. Les login/password valides sont stockés dans une base de donnée et j'ai une fonction php qui vérifie si l'utilisateur a rentré un log/passwd valide.

En gros, je me demande si il est possible de cracker mon site facilement ou non ou si c'est carrément impossible... Merci de vos réponses.


Encore merci

ps: Quand je dis cracker le site, c'est se faire passer pour quelqu'un d'autre sans posséder le log/pass évidemment
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2006, 16h39   #2
Membre Expert
 
Avatar de zooro
 
Inscription : avril 2006
Messages : 922
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2006
Messages : 922
Points : 1 149
Points : 1 149
Bonjour,

Tu utilises POST pour envoyer les infos, mais les infos sont envoyées en clair.
Il me semble qu'à part intercepter le login/password pendant le transfert, la sécurité est plutôt bonne. Bon, pour l'améliorer, tu pourrais éventuellement utiliser HTTPS.

Celà dit, concernant le code source de la page, j'ai vu que tu as de l'HTML avant la balise <html> marquant le début de la page...
__________________
[alkama] quelqu'un est allé voir la guerre des mondes?
[@Chrisman] j'espère pour spielberg
--- bashfr.org
zooro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2006, 16h53   #3
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Peux-tu poster le code du script d'authentification ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2006, 17h25   #4
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
Bonjour,

je ne sais pas si cela peut aussi vous intéresser mais avec un aspirateur de site, on peut quand même voir la page protéger.

Donc en utilisant le https, ça pourrait résoudre le problème comme dit plus haut.
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 07h51   #5
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
L'authentification se fait sur deux fichiers.

1)
echo "
<html>
<head>
<title>Formulaire d'identification</title>
</head>
";

setDebutZonePos("absolute", 100, 250);

echo "
<form action=\"XXXXX.php?saisie=$saisie\" method=\"post\">
login : <input type=\"text\" name=\"login\">
<br />
mot de passe : <input type=\"password\" name=\"pwd\"><br />
<br><input type=\"submit\" value=\"Connexion\">
</form>
";

setFinZonePos();

echo "
</body>
</html>
";


2)
if (isset($_POST['login']) && isset($_POST['pwd'])) {

// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
$dir = goodLogBDD($_POST['login'], $_POST['pwd']);

if ($dir != "") //$login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd'])
{
// on redirige notre visiteur vers une page de notre section membre

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

if ($saisieLog == 1)
{
echo "
<script language=\"JavaScript\">
document.location = \"variables.php?page=".$_SESSION['page']."&feuille=1\"
</script>
";
}
else
{
echo "
<script language=\"JavaScript\">
document.location = \"variables.php?page=1\"
</script>
";
}
//header ('location: variables.php?page=1');
}
else {
// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
echo '<body onLoad="alert(\'Membre non reconnu ...\')">';
// puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}

}
else {
echo 'Les variables du formulaire ne sont pas déclarées.';
}


Voilà, une autre question , c'est facile pour un hacker d'attendre que qqun se log pour intercepter les POST ???
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 09h53   #6
Membre confirmé
 
Avatar de Julien.alkaza
 
Inscription : octobre 2004
Messages : 240
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : octobre 2004
Messages : 240
Points : 240
Points : 240
Envoyer un message via MSN à Julien.alkaza
Pour cela il faut qu'il soit entre les deux machines...Sinon il ne peut pas intercepter les données...
Ou alors il a placé un bout de soft qui redirige les flux...
__________________
Admin Réseaux & Systèmes.

Red Hat Certified Technician...#604006101698235
Julien.alkaza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 10h31   #7
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut conseil

Pour y voir plus clair dans ton code, place des ' dans les echo au lieu de \". Dans ton exemple le code est court, mais pour des gros projets, il est bien plus pratique et cela fait un seul caractère au lieu de deux.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 12h01   #8
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Citation:
Envoyé par Henry9
Bonjour,

je ne sais pas si cela peut aussi vous intéresser mais avec un aspirateur de site, on peut quand même voir la page protéger.

Donc en utilisant le https, ça pourrait résoudre le problème comme dit plus haut.
Pour éviter cela, il faut faire un test vérifiant l'existence d'une variable de session initialisée après identification réussie, si je ne m'abuse. En cas d'absence de cette variable de session, on fait un header qui redirige vers le formulaire.
Sinon c'est complètement artificiel comme formulaire d'identification.
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h03   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
C'est la fonction goodLogBDD() qu'il faut que tu postes pour qu'on te dise si ton script est sécurisé.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h26   #10
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
function openBDD()
{
global $BDD;

// === CONNEXION A LA BD ===
// connexion
mysql_connect($BDD[0], $BDD[1], $BDD[2]);
mysql_select_db($BDD[3]);
}


function goodLogBDD($log, $pass)
{
global $BDD;
openBDD();

// Requête de sélection des messages
$SQL = "SELECT * FROM " . $BDD[4] . " WHERE nom=\"" . $log . "\" LIMIT 0, 30";

$res = mysql_query($SQL);
$val = mysql_fetch_array($res);

$prenom=$val["prenom"];
closeBDD();

if ($prenom === $pass)
return "OK";
return "";
}



Alors j'ai mes paramètres de bdd déclarés en variables globales, est-ce dangereux? QQun peut-il trouver quel est le nom de mes variables globales et les récupérer et ainsi accéder à la BDD et avoir les log et pass de mes clients???

Merci de vos réponses...
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h34   #11
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Tu ne valides pas tes POST avant la requête SQL. Tu risques une injection SQL.
Ici, ça ne paraît pas très dangereux, mais par principe tu devrais systématiquement passer tes données utilisateur par mysql_real_escape_string() avant de faire une requête.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h38   #12
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
Euh... Tu peux préciser un peu cette fonction sql ?? car je n'ai pas bien saisi...

Merci
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h43   #13
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par jc_cornic
Euh... Tu peux préciser un peu cette fonction sql ?? car je n'ai pas bien saisi...

Merci
Il faut lire le manuel php
En gros, mysql_real_escape_string() échappe tous les caractères dangereux permettant notamment les injections SQL.

Pour ton code, cela reviendrait à écrire :
Code :
$SQL = 'SELECT nom, prenom FROM ' . $BDD[4] . ' WHERE nom="' . mysql_real_escape_string($log) . '"';
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h50   #14
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
OK, merci pour l'info, et sinon vg33, que penses tu de mon code au niveau sécurité ?? dois-je utiliser le chiffrage md5 ou autre cryptage ou est-ce que ca suffit ?

Merci
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 13h58   #15
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par jc_cornic
OK, merci pour l'info, et sinon vg33, que penses tu de mon code au niveau sécurité ?? dois-je utiliser le chiffrage md5 ou autre cryptage ou est-ce que ca suffit ?

Merci
C'est une vaste question... Je te conseille de lire les tutoriels sur la sécurité...
En quelques mots :
1) Le hashage (md5, sha1...) de mdp côté client est une bonne solution pour éviter le shiffing, à condition d'utiliser un grain de sel.
2) Le hashage des mdp en bdd interdit à l'admin de se connecter avec l'id d'un membre, ce qui est une bonne chose.
3) Une sécurité réelle (et encore) ne peut exister dans utiliser HTTPS/SSL/SSH...
Conclusion : à toi d'adapter ta sécurité au niveau de confidentialité que tu dois respecter...
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 14h11   #16
Membre confirmé
 
Avatar de NeHuS
 
Inscription : décembre 2004
Messages : 343
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 343
Points : 267
Points : 267
Citation:
Parse error: syntax error, unexpected $end in /home.6/a/c/t/actegest/www/newDefine.php on line 1244
__________________
Cliquez sur

Evitez de mettre Probleme
dans les titres de vos posts
NeHuS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 14h32   #17
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
dis moi nehus, tu as testé ca quand??? car je viens de tester et je n'ai pas ton msg d'erreur, peux-tu me donner ton OS et explorer (IE, firefox...)

Merci
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2006, 15h21   #18
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par NeHuS
Que vient faire ce post ici ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h03.


 
 
 
 
Partenaires

Hébergement Web