Agenda

Avril
2023

L M M J V S D
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Jour avec événement(s)
Jour férié
MER
MER
Carte des utilisateurs
Login
 Connexion
Glossaire
icon_npds_glossaire

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | Autres

En ligne

Il y a actuellement 84 visiteur(s) et 0 membre(s) en ligne.

Devenez membre privilégié en cliquant ici

Chat anonyme -1
sondage 2
Test sondage
Résultats  Anciens sondages
  • Votes : 1321
  • Commentaire(s) : 5
Galeries Photo
Activité du Site

Pages vues depuis 20/04/2015 : 21 713 250

  • Nb. de membres 44
  • Nb. d'articles 4
  • Nb. de forums 50
  • Nb. de sujets 9
  • Nb. de critiques 2

Top 10  Statistiques

Github jpb
Bloc 2 affichant une galerie

Index du forum »»  Road map développement »» Implémentation nouveau process de cryptage

Implémentation nouveau process de cryptage#1120

7Contributeur(s)
Nicolas2jpbnpdsutilisateurtestkyliandpagestecnpdsutilisateurseverine
2 Modérateur(s)
phrjpb
jpb jpbicon_post
Suite au(x) notice(s) dues à l'évolution de la fonction crypt() qui étaient à l'origine de ce post nous voici donc à la ré-implémentation du système de cryptage et par conséquence des différents login.
Cette ré-implémentation délicate a de plus corrigé d'autres problèmes sporadiques liés au contenu des mots de pass. Elle a été orientée pour que ce soit totalement transparent pour le webmaster et les utilisateurs donc sans campagne de remise à jour des mots de pass. En cas de nouveau site recevant des anciennes données avec donc les mdp en clair ou cryptés avec l'ancien système les mdp seront donc analysés et crypté avec le nouveau système systématiquement au fur et à mesure des connections des utilisateurs ou des administrateurs.
Les obscures options de cryptage des mots de pass ($system et $system_md5) ont été désimplémentées.

(
Pour mémoire première implémention : testée fonctionnelle mais abandonnée.
- Les obscures options de cryptage des mots de pass ($system et $system_md5) sans interface (à l'exception de celle l'installation automatique) ont été maintenues homogénéisées et rendues fonctionnelles (en cas de modification manuelle du config.php) ! Par défaut elles sont toutes les deux à 1 ce qui signifie que les mots de passe utilisateurs et administrateurs seront cryptés sauf choix contraire à l'installation ou modification manuelle du config.php. Après une modifcation manuelle de cette/ces options les pass seront donc reconvertis (cryptés ou non cryptés) au fur et à mesure des connections des utilisateurs ou des administrateurs.
)

Etat des tests

🟢 ou 🔴


user.php
1.0 ==> création d'un nouvel utilisateur pass choisi 🟢
1.1 ==> création d'un nouvel utilisateur pass portail 🟢<= ok

2==> test avec un ancien mot de pass 🟢 (quelque soit le cryptage !)<= ok

3 ==> la base suit bien les modifs sont correctes 🟢 <= ok
4 ==> procédure de mot de passe perdu 🟢
5 ==> changement du mot de pass par l'utilisateur 🟢<= ok
6 ==> test un utilisateur connu avec un mot de passe bidon 🟢 <= ok
7 ==> test fermeture des inscriptions 🟢

8==> connexion 🟢 <= ok (plus lente ...)

newtopic.php
9 ==> nouveau sujet par un membre en anonyme 🟢 <= ok

admin/users.php
10 ==> création membre par admin : connexion/déconnexion ... 🟢<= ok

ADMINISTRATION ==> implementation / test
12 ==> config.php 🟢 (desimpementation $system $system_md5) <= ok
13 ==> admin/settings_save.php 🟢 (desimpementation $system $system_md5) <= ok

14 ==> admin/authors.php 🟢
15 ==> auth.inc.php 🟢
- connexion ancien admin 🟢 <= ok
- création d'un admin et connexion de celui ci 🟢 <= ok
- modification pass admin non connecté et reconnexion 🟢 <= ok
- modification autres infos admin non connecté 🟢
- modification pass de l'admin connecté 🟢 (avec reconnexion auto)
- modification autres infos de l'admin connecté 🟢

16 ==> sql/revolution_16.sql 🟢 <= ok

INSTALL AUTO ==> implementation / test
install/etape_4.php 🟢 / 🟠
install/libraries/lib-inc.php 🟢 / 🟠
install/languages/spanish/install-spa.php 🟢 / 🟠
install/languages/german/install-ger.php 🟢 / 🟠
install/languages/english/install-eng.php 🟢 / 🟠


L'eau goutte à  goutte finit toujours par percer la pierre...
 Message édité par : jpb / 20-03-2021 17:38
Nicolas2 Nicolas2icon_post
Liste des fichiers modifiés [ 16 ] pour le nouveau système de cryptage

Utilisateurs
user.php 🟢
newtopic.php 🟢
replyH.php🟢 (pas de contexte pour debug ?...)🟠
reply.php🟢 (pas de contexte pour debug?...)🟠
admin/user.php 🟠 (à tester modif user)

Administrateurs
admin/authors.php 🟢
auth.inc.php 🟢

Install auto
install/etape_4.php 🟢 / 🟠
install/libraries/lib-inc.php 🟠 / 🟠
install/languages/spanish/install-spa.php 🟢 / 🟠
install/languages/german/install-ger.php 🟢 / 🟠
install/languages/english/install-eng.php 🟢 / 🟠

Common
config.php de base à modifier pour defaut (cryptage à 1 pour les 2 variables) 🟢
sql/revolution_16.sql 🟢 (modif table user et authors ajout champs hashkey et pass à 60)
admin/settings_save.php 🟢 (doc)
mainfile.php 🟢

 Message édité par : jpb / 13-03-2021 14:39
 Message édité par : jpb / 13-03-2021 14:41
 Message édité par : jpb / 13-03-2021 14:42
 Message édité par : jpb / 15-03-2021 20:03
 Message édité par : jpb / 15-03-2021 20:08
jpb jpbicon_post
reply.php implémenté

mais je ne trouve pas le contexte où debugger dans quel situation c'est utilisé ?.......
L'eau goutte à  goutte finit toujours par percer la pierre...
jpb jpbicon_post
je pensais trouver un contexte légèrement similaire à newtopics cad repondre à un post en connexion anonyme pour un membre mais non ....
L'eau goutte à  goutte finit toujours par percer la pierre...
Nicolas2 Nicolas2icon_post
virer tous ce qui concerne hashkey

mainfile.php


function newPassBcrypt($pass, $dbpass, $uname, $connexion) {
global $NPDS_Prefix;
if (password_verify($pass, $dbpass) or strcmp($pass, $dbpass)==0 ) {
$AlgoCrypt = PASSWORD_BCRYPT;
$min_ms = 250;
$options = ['cost' => getOptimalBcryptCostParameter($pass, $AlgoCrypt, $min_ms)];
$hashpass = password_hash($pass, $AlgoCrypt, $options);
$newPass = crypt($pass, $hashpass);

if ($connexion === 'user') {
if(!password_verify($newPass, $dbpass) or strcmp($pass, $dbpass)!=0 ) {
sql_query("UPDATE ".$NPDS_Prefix."users SET pass='$newPass' WHERE uname='$uname'");
}

$result = sql_query("SELECT pass FROM ".$NPDS_Prefix."users WHERE uname = '$uname'");
if (sql_num_rows($result)==1)
$setinfo = sql_fetch_assoc($result);

$dbpass = $setinfo['pass'];
} elseif ($connexion === 'admin') {
if(!password_verify($newPass, $dbpass) or strcmp($pass, $dbpass)!=0 ) {
sql_query("UPDATE ".$NPDS_Prefix."authors SET pwd='$newPass' WHERE aid='$uname'");
}

$result = sql_query("SELECT pwd FROM ".$NPDS_Prefix."authors WHERE aid = '$uname'");
if (sql_num_rows($result)==1)
$setinfo = sql_fetch_assoc($result);

$dbpass = $setinfo['pwd'];
}
}

return array($newPass, $dbpass);
}


user/login()


function login($uname, $pass) {
global $NPDS_Prefix, $setinfo;

$result = sql_query("SELECT pass, uid, uname, storynum, umode, uorder, thold, noscore, ublockon, theme, commentmax, user_langue FROM ".$NPDS_Prefix."users WHERE uname = '$uname'");
if (sql_num_rows($result)==1) {
$setinfo = sql_fetch_assoc($result);
$result = sql_query("SELECT open FROM ".$NPDS_Prefix."users_status WHERE uid='".$setinfo['uid']."'");
list($open_user) = sql_fetch_row($result);
if ($open_user==0) {
Header("Location: user.php?stop=99");
return;
}
$dbpass = $setinfo['pass'];
$pass = utf8_decode($pass);

list($newpass, $newdbpass) = newPassBcrypt($pass, $dbpass, $uname, 'user');

if(password_verify(urldecode($pass), $dbpass)
or password_verify($pass, $newdbpass)
)
docookie($setinfo['uid'], $setinfo['uname'], $newdbpass, $setinfo['storynum'], $setinfo['umode'], $setinfo['uorder'], $setinfo['thold'], $setinfo['noscore'], $setinfo['ublockon'], $setinfo['theme'], $setinfo['commentmax'], $setinfo['user_langue']);
else {
Header("Location: user.php?stop=1");
return;
}

$ip = getip();
$result = sql_query("SELECT * FROM ".$NPDS_Prefix."session WHERE host_addr='$ip' AND guest='1'");
if (sql_num_rows($result)==1)
sql_query("DELETE FROM ".$NPDS_Prefix."session WHERE host_addr='$ip' AND guest='1'");

Header("Location: index.php");
} else
Header("Location: user.php?stop=1");
}


auth.inc.php


if ((isset($aid)) and (isset($pwd)) and ($op == 'login')) {
if ($aid!='' and $pwd!='') {
$result=sql_query("SELECT pwd FROM ".$NPDS_Prefix."authors WHERE aid='$aid'");
if (sql_num_rows($result)==1) {
$setinfo = sql_fetch_assoc($result);
$dbpass = $setinfo['pwd'];

list($newpass, $newdbpass) = newPassBcrypt($pwd, $dbpass, $aid, 'admin');

if(password_verify($pwd, $dbpass)
or password_verify($pwd, $newdbpass)
) {
$admin = base_64_encode("$aid:".md5($newdbpass));
if ($admin_cook_duration<=0)
$admin_cook_duration=1;
$timeX=time()+(3600*$admin_cook_duration);
setcookie('admin',$admin,$timeX);
setcookie('adm_exp',$timeX,$timeX);
} else
Admin_Alert("Passwd not in DB#1 : $aid");
}
}
}


Fin
 Message édité par : Nicolas2 / 19-03-2021 20:17
 Message édité par : Nicolas2 / 19-03-2021 21:30
 Message édité par : Nicolas2 / 19-03-2021 21:58
Nicolas2 Nicolas2icon_post
password_verify pour ancien pass crypter npds
strcmp pour ancien pass clair npds

la tu na plus de system 1 ou 0 a gérer tu fait juste un comparaison ancien mot de pass si ok tu fit la mise a jour et te connecte avec le nouveau password en hash

 Message édité par : Nicolas2 / 19-03-2021 20:53
jpb jpbicon_post
bon implémenté sur le labo y'a plus qu'a tester si on a rien oublié
L'eau goutte à  goutte finit toujours par percer la pierre...
severine severineicon_post
user et admin
- connexion avec les 3 types de mot de passe OK

- modification mdp user par un admin et reconnexion du user OK
- modification mdp user par un user et reconnexion du user OK


nb : le process de login est bien plus lent semble t il mais c'est pas gênant je pense
 Message édité par : jpb / 20-03-2021 09:19
 Message édité par : jpb / 20-03-2021 13:20
 Message édité par : jpb / 20-03-2021 13:35
Nicolas2 Nicolas2icon_post
oui vue connexion plus longue je c pas pourquoi
jpb jpbicon_post
c'est pas grave je pense oubli pas qu'on passe en plus par la fonction de calcul du cout ...
L'eau goutte à  goutte finit toujours par percer la pierre...