CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Page de connexion PHP avec mdp encodé

Soarzeh
Soarzeh
Niveau 33
10 juin 2019 à 17:14:27

Bonjour,

Il se trouve que j'essaie de créer une page de connexion en PHP pour des patients avec un login et un mdp insérés dans une base de données.
Il se trouve que l'ajout de patients dans la base de données se fait via une application Windows Form que j'ai créée et lors de l'insertion, le mot de passe du patient est encodé avec la méthode "Base64Encode" trouvable ici : https://stackoverflow.com/questions/11743160/how-do-i-encode-and-decode-a-base64-string

par exemple, le mot de passe d'un de mes patient est "alvesm" en initial et s'affiche "YWx2ZXNt" dans la base de données.
Or, sur ma page de connexion en PHP, impossible de réussir à me connecter. Le but étant que le patient puisse se connecter en rentrant son mot de passe initial.

Je pense que le problème vient de ces lignes de code : https://image.noelshack.com/fichiers/2019/24/1/1560179647-sans-titre-1.jpg

J'espère avoir été clair, je vous remercie de votre aide :ange:

deepblue
deepblue
Niveau 16
10 juin 2019 à 17:57:40

"impossible de réussir à me connecter", il se passe quoi ?

Tu es quand même conscient qu'en terme de sécurité, y'a rien de plus nul/dangereux/aberrant pour stocker des mots de passe ?

Soarzeh
Soarzeh
Niveau 33
10 juin 2019 à 18:40:57

Le 10 juin 2019 à 17:57:40 deepblue a écrit :
"impossible de réussir à me connecter", il se passe quoi ?

Tu es quand même conscient qu'en terme de sécurité, y'a rien de plus nul/dangereux/aberrant pour stocker des mots de passe ?

C'est pour un projet de fin d'année, un truc temporaire donc, j'apprends juste, je ne compte pas mettre ça en ligne.

Scorpionnocrag
Scorpionnocrag
Niveau 9
10 juin 2019 à 20:14:23

Le 10 juin 2019 à 18:40:57 Soarzeh a écrit :

Le 10 juin 2019 à 17:57:40 deepblue a écrit :
Tu es quand même conscient qu'en terme de sécurité, y'a rien de plus nul/dangereux/aberrant pour stocker des mots de passe ?

j'apprends juste

Donc tu apprends à mal faire les choses.

Popovitch
Popovitch
Niveau 26
10 juin 2019 à 20:17:25

Ton mot de passe encodé avec la méthode base64encode se décode facilement avec la méthode base64decode, ton mot de passe n'est à aucun moment sécurisé...

Utlise plutôt ces fonctions :
- https://www.php.net/manual/en/function.password-hash.php
- https://www.php.net/manual/en/function.password-verify.php

:ok:

Pseudo supprimé
Pseudo supprimé 10 juin 2019 à 22:49:09

Hello,

Par contre ajoute quelques sauts de lignes pour aérer un peu ton code et surtout, tu devrais éviter le franglais, si t'es pas à l'aise avec l'anglais, donne des noms en français parce que tu vas t'y perdre à force ^^

Olivied
Olivied
Niveau 36
11 juin 2019 à 07:50:11

Comme dis précédemment, utilise plutôt la fonction password_hash qui est nettement plus sécurisé. Même si tu ne compte pas mettre ceci en ligne, autant prendre de bonnes habitudes :ok:

Tu sauvegardes dans une variable la clé générée par password_hash et tu utilises la fonction password_verify en passant cette clé et le mot de passe rentré par l’utilisateur ($_POST[‘password’]) pour vérifier que cela concorde.

T’as aussi moyen de gagner quelques lignes dans ton code:

if (!$userexists == 1) {
$error = ...
}
rimulapawi
rimulapawi
Niveau 4
11 juin 2019 à 14:19:38

Hello,

$requser->rowCount()

Voilà ton problèmes. https://www.php.net/manual/fr/pdostatement.rowcount.php

PDOStatement::rowCount() retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l'objet PDOStatement correspondant.

Tu fais un select, forcément, aucune ligne n'est affectée.

A ta place, je ne procéderais pas de cette façon. Mais plutôt :
- "select * where pseudo = tonpseudo' (bien entendu, en préparant ta requête comme tu l'as déjà fait)
Si tu as un résultat, alors tu check si le mdp est bon
Sinon, le user n'existe pas

Non seulement ça te permet de mieux gérer tes erreurs et de savoir d'où vient le problème (mot de passe incorrect ou identifiant incorrect), mais en plus tu pourras stocker les données de tes utilisateurs en session.

N'hésites pas à me MP si tu as besoin d'aide.

Sinon, comme dit précédemment, tu ne dois pas te contenter d'encoder la chaîne.
Tu dois la hasher pour rendre impossible toute récupération de la chaine d'origine à partir de la chaine stocké dans ta base, voire ajouter un sel avant de la hasher (ce qui est très bien fait automatiquement par password_hash que conseille vdd).
Autant prendre les bonnes habitudes

Message édité le 11 juin 2019 à 14:24:15 par rimulapawi
Thymotep
Thymotep
Niveau 10
11 juin 2019 à 14:27:21

Le 11 juin 2019 à 14:19:38 rimulapawi a écrit :
Hello,

Non seulement ça te permet de mieux gérer tes erreurs et de savoir d'où vient le problème (mot de passe incorrect ou identifiant incorrect), mais en plus tu pourras stocker les données de tes utilisateurs en session.

Pour la vérification de l'identifiant, à part du mot de passe, ce n'est pas une bonne pratique selon moi. Surtout si l'identifiant est un mail. N'importe qui sera à même de savoir si un mail est inscrit sur le site, simplement en tentant de se connecter. Ne pas différencier l'erreur "identifiant" de l'erreur "mot de passe" n'est pas problématique selon moi.

rimulapawi
rimulapawi
Niveau 4
11 juin 2019 à 14:38:00

Le 11 juin 2019 à 14:27:21 Thymotep a écrit :

Le 11 juin 2019 à 14:19:38 rimulapawi a écrit :
Hello,

Non seulement ça te permet de mieux gérer tes erreurs et de savoir d'où vient le problème (mot de passe incorrect ou identifiant incorrect), mais en plus tu pourras stocker les données de tes utilisateurs en session.

Pour la vérification de l'identifiant, à part du mot de passe, ce n'est pas une bonne pratique selon moi. Surtout si l'identifiant est un mail. N'importe qui sera à même de savoir si un mail est inscrit sur le site, simplement en tentant de se connecter. Ne pas différencier l'erreur "identifiant" de l'erreur "mot de passe" n'est pas problématique selon moi.

Je ne dis à aucun moment qu'il doit afficher l'erreur à l'utilisateur, mais en effet c'est bien de le préciser

Je parlais de gérer les erreurs au sens blacklist, logs, ou alerte du terme par exemple. On ne blacklist pas forcément de la même façon quand un user est incorrect que quand un password l'est. Plutôt coté administration qu'utilisateur donc

Message édité le 11 juin 2019 à 14:38:21 par rimulapawi
Thymotep
Thymotep
Niveau 10
11 juin 2019 à 14:57:57

Le 11 juin 2019 à 14:38:00 rimulapawi a écrit :

Le 11 juin 2019 à 14:27:21 Thymotep a écrit :

Le 11 juin 2019 à 14:19:38 rimulapawi a écrit :
Hello,

Non seulement ça te permet de mieux gérer tes erreurs et de savoir d'où vient le problème (mot de passe incorrect ou identifiant incorrect), mais en plus tu pourras stocker les données de tes utilisateurs en session.

Pour la vérification de l'identifiant, à part du mot de passe, ce n'est pas une bonne pratique selon moi. Surtout si l'identifiant est un mail. N'importe qui sera à même de savoir si un mail est inscrit sur le site, simplement en tentant de se connecter. Ne pas différencier l'erreur "identifiant" de l'erreur "mot de passe" n'est pas problématique selon moi.

Je ne dis à aucun moment qu'il doit afficher l'erreur à l'utilisateur, mais en effet c'est bien de le préciser

Je parlais de gérer les erreurs au sens blacklist, logs, ou alerte du terme par exemple. On ne blacklist pas forcément de la même façon quand un user est incorrect que quand un password l'est. Plutôt coté administration qu'utilisateur donc

Ca à du sens effectivement :ok: De toute façon on s'éloigne du problème initial, où il n'y a aucune sécurité et où des réponses ont déjà été apportés.

Highscore
Highscore
Niveau 7
12 juin 2019 à 13:46:50

Le base64 ne sert rien, c'est de l'encodage, pas du cryptage.

Sinon pour le principe :
tu stocke un mot de passe crypté en db
A chaque connexion, l'utilisateur rentre son pass en clair, tu le crypte (same method) et ensuite tu le compare avec ce que t'as en db.

rimulapawi
rimulapawi
Niveau 4
13 juin 2019 à 09:01:38

Le 12 juin 2019 à 13:46:50 Highscore a écrit :
Le base64 ne sert rien, c'est de l'encodage, pas du cryptage.

Sinon pour le principe :
tu stocke un mot de passe crypté en db
A chaque connexion, l'utilisateur rentre son pass en clair, tu le crypte (same method) et ensuite tu le compare avec ce que t'as en db.

Je pense que ça lui a déjà été pas mal répété. Qui plus est, on ne crypte pas un mot de passe pour le stocker, on le hash, et c'est très différent. Et enfin, tu ne donnes pas de solution pour son problème.. anyway la solution est là

Le 11 juin 2019 à 14:19:38 rimulapawi a écrit :
Hello,

$requser->rowCount()

Voilà ton problèmes. https://www.php.net/manual/fr/pdostatement.rowcount.php

PDOStatement::rowCount() retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l'objet PDOStatement correspondant.

Tu fais un select, forcément, aucune ligne n'est affectée.

A ta place, je ne procéderais pas de cette façon. Mais plutôt :
- "select * where pseudo = tonpseudo' (bien entendu, en préparant ta requête comme tu l'as déjà fait)
Si tu as un résultat, alors tu check si le mdp est bon
Sinon, le user n'existe pas

Non seulement ça te permet de mieux gérer tes erreurs et de savoir d'où vient le problème (mot de passe incorrect ou identifiant incorrect), mais en plus tu pourras stocker les données de tes utilisateurs en session.

A tester du moins

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment