salut,
J'ai un projet à rendre demain et je dois créer un système de connexion avec cookies (username et password), et securiser le cookie password.
Tout fonctionne mais je n'arrive pas à sécuriser mon cookie password .
Mon code :
<?php
//username et mdp d'administrateur
$login="";
$motpass="";
//Récupération des valeurs
$username=$_POST['username'];
$psw=$_POST['psw'];
//Vérification
if($username==$login AND $psw==$motpass)
{
$expir=time() + 200;
//Ecriture des cookies
setcookie("username",$username,$expir);
setcookie("password",$psw,$expir);
//Redirection vers la page à accès réservé
$contenu = include("action2.php");
}
else
//Redirection vers la page de saisie du code
echo "<script type=\"text/javascript\"> window.location='authentificationerreur.php' ;</script>";
?>
MERCI
Oula!
Pour répondre à la question "comment sécuriser un cookie ?", on commence déjà par ne pas mettre n'importe quoi dedans. En l’occurrence, il ne faut jamais y placer un couple login/mdp !
Je t'invite à utiliser les sessions qui permettent, façon un poil sécurisée, de stocker ce genre de données : http://php.net/manual/fr/function.session-start.php#refsect1-function.session-start-examples
C'est pour éviter ce genre de code qu'on a inventé les frameworks
Si t'es profs t'ont enseignés à stocker un MDP dans un cookie, change d'école
Le 23 juin 2017 à 23:58:24 Le_Tryall a écrit :
Si t'es profs t'ont enseignés à stocker un MDP dans un cookie, change d'école
je suis en dut réseaux telecoms les profs sont pas oufs, sinon merci pour vos réponses
<?php
//initialisation des donnée
$ip = $_SERVER['REMOTE_ADDR'];
$userStatus = false;
// Récupération des donné sauvegardé en base de donnée
$key = md5(rand());
$pass = md5($key . 'password');
$lastIp = md5($key . $ip;
$user = 'user';
// Le formulaire est validé par l'utilisateur
if(isset($_POST['send']) && $_POST['send'] && $_POST['password'] != " && $_POST['user'] != '') {
// NE JAMAIS SAUVEGARDER UN PASSWORD EN CLAIR !!!
$formPass = md5($key . $_POST['password']);
$formUser = $_POST['user'];
// Valid password
if($formPass == $pass) {
$vPass = true;
} else {
$vPass = false;
}
// Valid user
if($formUser == $user) {
$vUser = true;
} else {
$vUser = false;
}
// Si tout est OK
if($vPass && $vUser) {
if(isset($_POST['rememberMe']) && $_POST['remeberMe']) {
$cookieTime = time() + 3600 * 24 * 7; // Une semaine
$cookieValue = md5($key . $formPass);
$cookieDomain = 'domaine du site';
$cookieSecure = true;
setcookie('keyAuth', $cookieValue, $cookieTime, $cookieDomain, $cookueSecure);
}
}
}
// Si déja connecté
// Ont vérifie si l'IP n'a pas changé au cas où !
if(isset($_COOKIE['keyAuth']) && $_COOKIE['keyAuth'] == md5($key . $formPass) && md5($key . $ip) == $lastIp) {
// Tout est OK
$userStatus == true;
} else {
// Destruction du cookie
setcookie('keyAuth', time() - 1);
}
if($userStatus) {
// Utilisateur connecté
// Redirection, validation, role, modification des menus, etc...
} else {
// Utilisateur non connecté
// Affichage du formulaire de connexion.
}
à voir si tu ne peux pas remplacer ça :
if($formPass == $pass) {
$vPass = true;
} else {
$vPass = false;
}
par ça directement $vPass = $formPass == $pass;
J'ai pas fait de php depuis longtemps mais je pense que ça doit fonctionner. Sinon utiliser un ternaire.
Sinon le code n'est pas du tout structuré en couches et est peu maintenable.
Même si on utilise pas de framework ni l'OO, il est tout de même recommandé de diviser le code en fonctions !
var bool $vPass
var string $formPass
var string $pass
l'expression $formPass == $pass est un booléen, que tu peux stocker directement dans $vPass.
En fait tu peux écrire
$vPass = $formPass == $pass ? true : false;
Ce qui revient à $vPass = $formPass == $pass.
Le 24 juin 2017 à 02:54:51 WebScraper a écrit :
Sinon le code n'est pas du tout structuré en couches et est peu maintenable.
Même si on utilise pas de framework ni l'OO, il est tout de même recommandé de diviser le code en fonctions !
+1
Trop de "if", des variables dont le nom n'a aucun sens, des répétitions, ça sent mauvais (code smell)
Quand on met trop de commentaires pour expliquer un bout de code, c'est le moment d'extraire cette logique dans une methode ou une fonction, dont le nom, ainsi que les arguments, feront déja office de documentation.
Ok, j'ai simplement voulue expliqué à un étudient les bases de la sécurisation d'un cookies. Le reste du code est simplifier à l’extrême et sûr-commenté pour qu'un étudient qui place sont password en clair dans un cookies puisse comprendre...
Personne n'utiliserai mon code (fait en 5 minutes pour m'amuser et tenter d'expliquer) en prod, il faudrait être un idiot pour le faire !
Maintenant que vous avez pointez du doit l’évidence proposez au moins un script fonctionnel...