Langue
🎨 Skin viewer
Les plus téléchargés
- 1 npds_agenda415
- 2 npds_galerie384
- 3 Programmes de Technologie 1985 MEN ...381
- 4 86-Car368
- 5 photosize360
- 6 npds_annonces 357
- 7 npds_glossaire348
- 8 npds_encapsuleur343
- 9 bootstrap.png316
- 10 superhero288
Index du forum »» Road map développement »» Implémentation nouveau process de cryptage
Implémentation nouveau process de cryptage#1120
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 🟢 / 🟠
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
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 🟢
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
virer tous ce qui concerne hashkey
mainfile.php
user/login()
auth.inc.php
Fin
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
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
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
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
- 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