Lecture cookie protégé

omlaly - 31 janv. 2013 à 11:31
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 - 7 févr. 2013 à 00:44
Bonjour,

Pour transmettre des données d'une page à une autre, j'utilise SETCOOKIE de PHP pour enregistrer le pseudo de l'utilisateur. Tout marche !!! Seulement quand je vais voir les COOKIES sur un navigateur Internet, je vois la valeur que j'ai rentré. J'aimerais le protéger avec un grain de sel ou avec SHA1 ou MD5 ou autre. J'arrive à le faire (faire afficher une chaine de caractères au lieu du pseudo rentré) mais quand j'affiche le cookie, je n'arrive pas à le décrypter (pour non pas afficher la chaine de caractères crypté mais le pseudo qu'il aura saisi)

Avez-vous une idée ?

En attendant vos réponses, je continue mes recherches...
Cordialement

15 réponses

cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 11:41
Salut, les fonctions sha1 et md5 hache la chaine et ne crypte pas.
Alors, impossible de décrypter.
Donc, la solution c'est de haché le passwd et de le comparer tel quel dans la db à la création d'une session.

stéph
0
Merci de ta réponse !

Tu veux dire que si je stocke le pseudo dans un cookie, ce n'est pas la peine de le crypter ?

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 12:35
Oui, pas la peine de le haché, car le processus inverse n'existe pas :)

stéph
0
C'est pas possible pour un pirate de changer le contenu d'un cookie (puisqu'il le voit) pour, par exemple, se connecter avec le compte administrateur grâce au cookie ?

Bon moi, c'est mon petit site perso ! ;)

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 13:15
L'idée, c'est que le client peut ce connecter à nouveau sans ce soucier des accès.
Il est sûr que pour un site ou la sécurité est très importante, la possibilité de sauvegarder les accès en cookie sera jamais disponible.
Donc, il faut respecter les contraintes du client. Veut-il ce genre de rappel pour son site.

stéph
0
Ok, par contre je souhaiterais faire un système de droits. Par exemple, pour l'administrateur (pour moi), je voudrais rajouter un menu. Concrètement, si on se connecte avec mon compte, je voudrais qu'il y ait ce menu par contre si on se connecte avec un compte "membres" ce menu disparait et d'autres fonctionnalités sont disponibles.

Est-ce que c'est possible de faire tout ça avec les cookies ?

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 14:05
Non, car je te le dé-conseil.
Par contre, tu peux, voir même tu dois avoir trois tables dans la db.
Une pour les utilisateur du Back-Office, la deuxième pour la création de rôle, la troisième servira au accès (ressource).

Exemple:
Table user :
user.u_id = 1
user.u_r_id = 1
user.u_name = Toto

Table user_role :
user_role.r_id = 1
user_role.r_label = Admin

user_role.r_id = 2
user_role.r_label = Membre

Table user_ressource :
user_ressource.us_id = 1
user_ressource.us_r_id = 1
user_ressource.us_ressource = valeur accessible 1

user_ressource.us_id = 2
user_ressource.us_r_id = 1
user_ressource.us_ressource = valeur accessible 2

Donc, après être logué (je suis Toto), et que si mon champ user.u_r_id est égal à 1, j'ai accès à valeur accessible 1 et 2 car user.u_r_id (1) est égal à user_role.r_id (1) et égal aux user_ressource.us_r_id (1).

Et si le Back-Office est multilingue, tu ajoutes une table user_role_data et le r_label sera dans cette table.

Sinon sans db, Zend_Acl, la librairie devra être couplé à ton application.

stéph
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 14:10
A oui, donc, avec une instruction if(user_ressource.us_ressource === 'valeur accessible 1') {true}
Tu donne accès au contenu que tu veux :)

stéph
0
Alors là, je comprends pas tout !

Donc pour toi, utiliser les cookies pour ça, ce n'est pas la bonne méthode ?

Et les variables de sessions ?

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 14:33
Justement, il faut faire cela avec une variable de session.

Exemple:

$user['name'] = 'toto';
$user['name']['ressources'][0] = 'valeur accessible 1';
$user['name']['ressources'][1] = 'valeur accessible 2';

$_SESSION['user'] = $user;


Voilà, j'espère qu’avec cela :)

stéph
0
Mais il faut faire autant de tables que de niveaux de droits ? Est ce que je peux pas rajouter un champs "rôle" avec soit "administrateur" soit "membres" ?

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 14:54
Un niveau de droit est égal à un enregistrement dans la table ressource trié par rôle.

stéph
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
31 janv. 2013 à 18:44
Quoi c'est tout, plus de question :)
C'est triste, pour une fois qu'il y a de l'action.
Ici, je te proposais une gestion de rôle taillé pour un Back-Office.
Imaginons que tu voudrais que certaine de tes rubriques soit read-only ou read-write.
Enfaite, non laisse tomber. Je parle déjà chinois pour toi car tu n'as pas réagi au poste précédent.
Oublie tout-ce-que j'ai dit.

Oui, je répond à ton dernier poste. Ajoute un champs rôle dans ta table user avec; d’ailleurs soyons fou.
Pour une meilleur indexation de ton champ, je te propose une énumération ENUM ('administrateur','membres') avec comme valeur par défaut membres.
Car je crois que tu seras le seul administrateur de ton appli et comme ça, quand tu auras un INSERT, le champ ce complètera seul. Cool non ?


stéph
0
Salut

Bon, j'y suis arrivé en mettant un if dans un if, ça marche mais je suis conscient que c'est à l'arrache, voici le code :
   // Sélectionnement de l'utilisateur désiré dans la base de données

$query_connexion=mysql_query("SELECT user_pseudo FROM user WHERE user_pseudo = '$identifiant_connexion' AND user_mdp =  '$password_connexion_sha1'") or die('Erreur lors de la connexion'.mysql_error()); 
$query_connexion_administrateur=mysql_query("SELECT user_acces, user_pseudo FROM user WHERE user_pseudo = '$identifiant_connexion' AND user_mdp =  '$password_connexion_sha1' AND user_acces ='1'") or die('Erreur lors de la connexion'.mysql_error());

// Test si l'utilisateur est inscrit - réponse positive
if(mysql_num_rows($query_connexion) == 1) { 
echo "<center>Vous êtes authentifié. Merci, vous allez être redirigé dans 5 secondes.</center>";
echo '<meta http-equiv="refresh" content="5;URL=adresse.php">'; 
setcookie("nom", "", time() - 3600, '/'); $_POST['identifiant_connexion']);

// Test suivant pour voir si c'est moi qui s'est connecté - ça marche mais à l'arrache !!!
if(mysql_num_rows($query_connexion_administrateur) == 1) {
setcookie("cookie_user_connexion", $_POST['identifiant_connexion']);
}
}


Comme vous l'avez vu dans les requêtes SQL, j'ai rajouté un champ sur la table : user_acces (avec ce code, on est d'accord il sert à rien à ce jour !) mais j'ai rencontré un problème lors de la conception de la requête SQL. Si vous pouvez me dire comment on s'en sert, je prends. A noter que le champ est dans la même table.

Je sais bien que ça doit être facilement crackable mais je n'arrive pas, pour l'instant, à faire mieux, à protéger plus.

Si vous pouvez m'éclairez afin d'optimiser la protection (notamment sur les variables de sessions ou autres), ce serait avec plaisir !

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
7 févr. 2013 à 00:44
Salut, dommage, tu as opté pour la solution la plus simple et pas utilisable pour un Back-office.
Mais l'important c'est d'avancer vers l'avant chacun à son rythme.

Donc, si tu veux que le user récupère les accès en COOKIE pour éviter de les retaper, c'est très bien.
Mais, il faut également les sauver en SESSION pour donnée des accès limités aux pages de ton application.

<?php
*...
if(mysql_num_rows($query_connexion) == 1) {
    $_SESSION['user]['token'] = 'une valeur';
*...


Donc, si par la suite, tu veux vérifier que l'utilisateur est bien logué :)
Tu as la clé token à vérifier.

stéph
0
Rejoignez-nous