vérifier et comprendre ma page de connexion

Mammouth du PHP | 506 Messages

04 juin 2021, 08:08

bonjour a tous


je souhaiterais pouvoir comprendre ma page de connexion qui ne vient pas de moi
j ai mis des commentaires si quelqu'un peux corriger ou pux etre modifier mes commentaires

Code : Tout sélectionner

<?php session_start(); // je me connecte a ma base require_once 'config.php'; //je verifie si peusdo et password sont vides if(!empty($_POST['pseudo']) && !empty($_POST['password'])) { //si ils sont vides alors on leurs donnes des valeurs que l utilisateurs vient d entrer $pseudo = htmlspecialchars($_POST['pseudo']); $password = htmlspecialchars($_POST['password']); //je prépare la table pour rechercher les infos entrees $check = $bdd->prepare('SELECT pseudo, email,id, password FROM utilisateurs WHERE pseudo = ?'); $check->execute(array($pseudo)); $data = $check->fetch(); //je verifie si data est vide if(!empty($data)) { //je compare le password_verify avec le password entrer et celui dans la base de donnée if(password_verify($password, $data['password'])) { //si tout est bon je crée une variable $session ['user'] avec le pseudo ; l email et l id $_SESSION['user'] = array('id'=>$data['id'], 'pseudo'=>$data['pseudo'], 'email'=>$data['email']) ; //je crée deux nouvelles variables $_SESSION['pseudo'] = $data['pseudo']; $_SESSION['email'] = $data['email']; // je me connecte au site header('Location: accueil-peche-perle.php?pseudo='.$_SESSION['pseudo']); die(); //en cas d erreur du pseudo }else{ header('Location: connexion-site.php?login_err=password'); die(); } //en cas d une autre erreur }else{ header('Location: connexion-site.php?login_err=already'); die(); } }

Avatar du membre
Eléphant du PHP | 70 Messages

04 juin 2021, 08:49

Salut,
if(!empty($_POST['pseudo']) && !empty($_POST['password']))
vérifie s'ils ne sont PAS vide. Le ! devant une fonction veux dire que l'on veux son contraire. En gros, !empty (n'est pas vide) peut être l'équivalent de isset (existe)

Du coup la même chose pour !empty($data), qui vérifie que $data n'est pas vide, et donc que la requête query à bien récupéré les données.

password_verify est utilisé pour comparer 2 mots de passes et retourne true/false s'il correspond/ne correspond pas. Attention, il sert à comparer un mot de passe classique (saisie utilisateur) avec un mot de passe haché (crypté) avec password_hash

Le premier else n'est pas "en cas d erreur du pseudo" mais si les mots de passe ne correspond pas (et que password_verify à retourner false)

Le deuxième else lui est appelé lorsque la variable $data est vide, est donc que les informations n'ont pas était récupéré en base de données
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Mammouth du PHP | 506 Messages

04 juin 2021, 09:40

salut Shadowwera

merci pour la réponse et surtout bien expliquée c est cela le plus important
pour le reste mon raisonnement est bon ??

une autre question
beaucoup de personnes disent que htmlspecialchars ne peux pas exister dans un formulaire de connexion

Avatar du membre
Eléphant du PHP | 70 Messages

04 juin 2021, 10:10

Oui le reste est bon

Pour le htmlspecialchars, il sert a convertir les balises de code en entités HTML (par exemple < deviens &lt;), de cette façon tu évite l'injection de code dans ton script. Il est selon moi indispensable de sécurisé TOUTES les données envoyé par un utilisateur !

Si tu veux éviter que ça "empêche" la connexion de certaines personnes, il va falloir que tu interdise les caractère spéciaux tel que < > ' " & etc. lors de la création de l'identifiant ! Car en effet, si une personne à un pseudo comme abc<def alors il sera traduit en abc&ltdef par htmlspecialchars, et donc ne matchera pas avec ta base de données !
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Mammouth du PHP | 506 Messages

04 juin 2021, 15:15

merci pour ton avis c est gentil
et surtout pour toutes ces explications

donc si l utilisateur se voit refuser l entrée a la base de donnée car il essaye de rentrer n importe quoi comme caractère que va t il ce passer ?

pourquoi certains webmaster sont allergiques a htmlspecialchars ?

si je voudrais passer l ID dans les autres pages je suppose que je dois juste ajouter cela

Code : Tout sélectionner

$_SESSION[ID'] = $data['ID'];

Avatar du membre
Eléphant du PHP | 70 Messages

04 juin 2021, 15:37

Tu devra faire une vérification par toi même avec du JS ou du PHP. Avec un régex, tu vérifie que l'utilisateur n'a pas mis de caractères interdit. S'il la fait, tu bloque la création et lui affiche un message du style "Oh, tu crois je sais pas ce que tu essaye de faire petit vilain ? oO " #-o

Peut être sont t'il allergique à la sécurité ou au travaille supplémentaire ? 8-|

Oui ( attention au manque d'un ' ), renseigne toi sur les Session, ça te sera extrêmement utile en PHP !
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Mammouth du PHP | 506 Messages

04 juin 2021, 15:48

merci pour la reponse
ah oui donc rendre plus complet le formulaire de connexion ...
existe il des tutos simple pour ajouter cela a mon code

oui juste j avais oublie le '

ca present que mon site se termine je vais pouvoir m atteler au détail

Avatar du membre
Eléphant du PHP | 70 Messages

04 juin 2021, 15:56

Ce cours sur OpenClassrooms traite plutot bien de ce sujet et d'autre chose
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Mammouth du PHP | 506 Messages

04 juin 2021, 16:43

ah oui pas mal merci pour le lien

Mammouth du PHP | 2703 Messages

04 juin 2021, 18:28

$_SESSION['user'] = array('id'=>$data['id'], 'pseudo'=>$data['pseudo'], 'email'=>$data['email']) ;
//je crée deux nouvelles variables
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];
le pseudo, l'email sont dans 2 variables différentes, ce qui n'est pas une bonne idée.
soit l'on a 3 variables avec l'id dans $_SESSION['userid']
soit une seule variable $_SESSION['user'] = array('id'=>$data['id'], 'pseudo'=>$data['pseudo'], 'email'=>$data['email']) ;

pour moi, il ne faut pas insérer la variable transformée par htmlspecialchars dans la table, car les données peuvent ne pas être utilisée dans une page html, mais dans du texte brut, dans le sujet d'un email ...
c'est quand on veux afficher la variable dans une page html qu'il faut utiliser htmlspecialchars.

$titre = $_GET['titre']; // avec $_GET['titre'] = "<a href='//domaindespammer.com'>sujet</a>"
mail("[email protected]", $titre, "test"); // le code html contenu dans le sujet n'est pas génant
echo "l'email $titre a été envoyé"; // le code html va faire qu'il y aura un lien vers le site du spammeur dans la page
echo "l'email ".htmlspecialchars($titre)." a été envoyé"; // pas de lien html