Bonsoir et merci de ta réponse,
kustolovic a écrit :
la faille principale de ton système est de fournir un mot de passe unique à tout le monde. C'est un peu comme distribuer des doubles de tes clés de maison sans jamais chercher à les récupérer. À force, c'est un secret de polichinelle.
Un système robuste nécessite une clé différente par utilisateur, que tu invalide lorsqu'il ne doit plus avoir accès.
Nous ne serions que 2 à avoir accès au formulaire. Mais je vois ce que tu veux dire. J'ai donc créé un profil administrateur et un profil utilisateur, chacun avec un mot de passe (l'admin -moi- connaissant le mdp de l'utilisateur mais pas l'inverse).
kustolovic a écrit :
Ensuite le md5 est mort, vive le md5. Ce hachage est considéré comme obsolète, en php utilise plutôt password_hash et password_verify. C'est facile à mettre en place et correspond mieux aux normes actuelles. MD5 est «suffisant» tant que tu ne stockes pas les mot de passe de tes partenaires, mais autant prendre les bonnes habitudes.
J'ai tenté de le mettre en place, mais je me heurte à un petit problème. J'ai modifié mon fichier password.php pour qu'il demande le login de l'utilisateur, comme suit:
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Identifiez-vous</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<LINK rel=STYLESHEET href="../stylesformulaires.css" type="text/css">
</head>
<body>
<p>Saisir le mot de passe permettant d'accéder à la liste des participants.</p>
<form action="checkpassword.php" method="post">
<p>
<input type="text" name="login"/>
<input type="password" name="mot_de_passe"/>
<input type="submit" value="Valider" />
</p>
</form>
</body>
</html>
Puis j'ai essayé de mettre en place le mot de passe avec password_hash:
- dans la base de donnée psswd, j'ai mis les mots de passe respectifs de l'utilisateur et de l'administrateur, hashés avec password_hash.
- ensuite, j'ai tenté de mettre en place tout cela dans mon fichier checkpassword.php, comme ceci:
<?php
//on se connecte à la base de données
try
{
$bdd = new PDO('mysql:host=sql.free.fr;dbname=mabase;charset=utf8', 'login', 'password');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
//On réceptionne le login et le password entrés par l\'utilisateur (OK, ça marche)
$password = $_POST['mot_de_passe'];
$login = $_POST['login'];
//on récupère le hash dans la base de donnée
$hash=$bdd->query('SELECT * FROM psswd WHERE nom="$login"')->fetchColumn();
//on hash ce mot de passe saisi par l\'utilisateur
$mix=password_hash($password, PASSWORD_DEFAULT);
//on compare les deux
if (password_verify($mix, $hash))
{
session_start();
$_SESSION['password'] = $hash;
$_SESSION['login']= $_POST['login'];
//Redirection du visiteur vers la 1e page
header('Location:page1.php');}
else
{
//Redirection du visiteur vers la page de connexion
header('Location:password.php');
}
?>
J'ai un problème qui me semble se focaliser sur la requête sql qui récupère les login et mots de passe dans ma base (pour info, ces 2 colonnes sont en CHAR avec une valeur de 255 caractères). En effet, un var_dump sur $hash renvoie "bool:false". Mais je n'arrive pas à voir d'où provient mon erreur. Je n'ai sans doute pas pris en compte les spécificités de la fonction password_hash.
kustolovic a écrit :
Seulement, il faut évaluer ce que tu entends par «sensible»: Si les données sont celles de tiers, tu as une responsabilité légale (coucou RGPD) de sécurisation et morale envers tes clients/partenaires (que généralement tu ne souhaites pas fâcher).
Précisément, ce sont des données de tiers (dont des mineurs) avec lesquelles il est hors de question de faire preuve de la moindre légèreté... Pour l'instant je ne suis qu'un prof qui organise des voyages scolaires et cherche un outil maison pratique pour centraliser les retours de documents avec mes collègues organisateurs. Pour être en https, il faudrait si j'ai bien compris que j'aie un nom de domaine (là je suis chez free) et que j'achète ou obtienne un certificat SSL. Cela viendra peut-être en son temps, mais pas tout de suite. Si la sécurité actuelle de mes pages suffit (avec le recours à password_hash, j'entends), vais donc pour l'instant me contenter de stocker des informations anodines du genre "papier rendu/pas rendu"
Modifié par bouffandt (05 Oct 2018 - 23:26)