Page 1 sur 1

vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 08:08
par flexi2202
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(); } }

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 08:49
par Shadowwera
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

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 09:40
par flexi2202
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

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 10:10
par Shadowwera
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 !

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 15:15
par flexi2202
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'];

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 15:37
par Shadowwera
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 !

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 15:48
par flexi2202
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

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 15:56
par Shadowwera
Ce cours sur OpenClassrooms traite plutot bien de ce sujet et d'autre chose

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 16:43
par flexi2202
ah oui pas mal merci pour le lien

Re: vérifier et comprendre ma page de connexion

Posté : 04 juin 2021, 18:28
par or 1
$_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