Gestion sha256 + Gestion 'hashChain' pour le 'token de synchronisation' des machines + Correction des 'view' : 'machines' et 'users'

This commit is contained in:
xdrm-brackets 2016-07-07 17:59:31 +02:00
parent e3a459200f
commit ff314a4950
18 changed files with 131 additions and 34 deletions

View File

@ -223,6 +223,19 @@
"machineDefault": {
"sync": {
"description": "Synchronisation d'une machine.",
"permissions": [],
"parameters": {
"token": { "description": "Code d'accès évolutif dynamique.", "type": "hash" },
"data": { "description": "Données (dépendent des modules).", "type": "array<mixed>" }
},
"output": {
"data": { "description": "Données (dépendent des modules).", "type": "array<mixed>" }
}
},
"create": {
"description": "Création d'une nouvelle machine.",
"permissions": ["warehouse", "admin"],

View File

@ -25,6 +25,8 @@
"getByCode",
"getByName",
"checkToken",
"search",
"getClusters"

View File

@ -23,6 +23,13 @@
/* [3] Gestion des authentifications et des droits
=========================================================*/
\manager\Authentification::check();

View File

@ -44,11 +44,11 @@
/* (3) Gestion de AUTH en fonction des tokens
---------------------------------------------------------*/
/* (1) Double authentification */
if( preg_match('/^([a-f0-9]{40})([a-f0-9]{40})$/', $AUTH, $match) )
if( preg_match('/^([a-f0-9]{64})([a-f0-9]{64})$/', $AUTH, $match) )
$_SESSION['AUTH'] = [ $match[1], $match[2] ];
/* (2) Authentification unique */
else if( preg_match('/^[a-f0-9]{40}$/', $AUTH, $match) )
else if( preg_match('/^[a-f0-9]{64}$/', $AUTH, $match) )
$_SESSION['AUTH'] = [ $match[0] ];
/* (3) Aucune authentification */
@ -143,7 +143,7 @@
public static function permission($expected){
/* [0] Mise à jour de l'authentification
=========================================================*/
self::check();
// self::check();
/* [1] Gestion de l'AUTH (authentification)

View File

@ -97,7 +97,7 @@
// Hash sha1/md5
case 'hash':
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
return $checker && is_string($value) && preg_match('/^[\da-f]+$/i', $value) && (strlen($value) == 40 || strlen($value) == 64);
break;
case 'alphanumeric':

View File

@ -74,10 +74,4 @@
=========================================================*/
\manager\sessionManager::session_start();
/* [3] Gestion des authentifications et des droits
=========================================================*/
\manager\Authentification::check();
?>

View File

@ -34,7 +34,7 @@
/* [2] On vérifie le mot de passe
=========================================================*/
$hash_password = sessionManager::secure_sha1($password);
$hash_password = sessionManager::secure_hash($password);
// Si mot de passe faux, on retourne une erreur
if( $nameFetched[0]['password'] != $hash_password )
@ -80,7 +80,7 @@
/* [2] On vérifie le mot de passe
=========================================================*/
$hash_password = sessionManager::secure_sha1($password);
$hash_password = sessionManager::secure_hash($password);
// Si mot de passe faux, on retourne une erreur
if( $usernameFetched[0]['password'] != $hash_password )

View File

@ -372,6 +372,28 @@
/* SYNCHRONISE UNE MACHINE
*
* @token<String> Token de synchronisation de la machine
* @data<Array> Données de la synchronisation
*
* @return data<Array> Données de retour de synchronisation
*
*/
public static function sync($params){
extract($params);
$checkToken = new Repo('machine/checkToken', [$token]);
return [
'tokenResult' => $checkToken->answer()
];
}
}

View File

@ -28,7 +28,7 @@
/* [1] Normalisation + verification des donnees
=========================================================*/
$password_hash = sessionManager::secure_sha1($password);
$password_hash = sessionManager::secure_hash($password);
/* [2] Creation de l'utilisateur
=========================================================*/
@ -343,7 +343,7 @@
/* [2] Normalisation + verification des donnees
=========================================================*/
$password_hash = sessionManager::secure_sha1($password);
$password_hash = sessionManager::secure_hash($password);
/* (1) Verification des parametres (si non nul + differents)*/
$diff_param = [

View File

@ -37,8 +37,8 @@
$insert_admin->execute([
':username' => $username,
':mail' => $mail,
':password' => sessionManager::secure_sha1( $password ),
':token' => sessionManager::secure_sha1( uniqid() )
':password' => sessionManager::secure_hash( $password ),
':token' => sessionManager::secure_hash( uniqid() )
]);
@ -79,7 +79,7 @@
/* [2] On met à jour le token
=========================================================*/
/* (1) On crée un nouveau token */
$new_token = sessionManager::secure_sha1( uniqid() );
$new_token = sessionManager::secure_hash( uniqid() );
/* (2) On applique le nouveau token */
$update_token = Database::getPDO()->prepare("UPDATE admin

View File

@ -2,6 +2,7 @@
namespace manager\repo;
use \manager\Database;
use \manager\sessionManager;
use \manager\repo\cluster as clusterRepo;
class machine extends parentRepo{
@ -66,7 +67,7 @@
*/
public static function search($id_warehouse, $keyword){
// On recupere les donnees
$searchmachines = Database::getPDO()->prepare("SELECT * FROM machine
$searchmachines = Database::getPDO()->prepare("SELECT id_machine, code, name FROM machine
WHERE id_warehouse = :id_warehouse
AND ( code LIKE '%".$keyword."%'
OR name LIKE '%".$keyword."%'
@ -359,6 +360,47 @@
/* VERIFIE MET A JOUR LE TOKEN DE SYNCHRONISATION
*
* @token<String> Nouveau token de synchronisation
*
* @return status<Boolean> VRAI si le token est correct, sinon FALSE
*
*/
public static function checkToken($token){
/* [1] On vérifie le token
=========================================================*/
$hash = sessionManager::secure_hash($token);
$byToken = self::getByToken($hash);
// Si aucun résultat, erreur
if( count($byToken) < 1 )
return false;
/* [2] On met à jour le token
=========================================================*/
$updateToken = Database::getPDO()->prepare("UPDATE machine
SET token = :token
WHERE id_machine = :id_machine");
$updateToken->execute([
':token' => $token,
':id_machine' => $byToken[0]['id_machine']
]);
/* [3] On retourne que tout s'est bien déroulé
=========================================================*/
return true;
}
}

View File

@ -33,8 +33,8 @@
VALUES(DEFAULT, :name, :password, :token)");
$insert_warehouse->execute([
':name' => $name,
':password' => sessionManager::secure_sha1( $password ),
':token' => sessionManager::secure_sha1( uniqid() )
':password' => sessionManager::secure_hash( $password ),
':token' => sessionManager::secure_hash( uniqid() )
]);
/* [3] On retourne l'id_warehouse ou FALSE si erreur
@ -74,7 +74,7 @@
/* [2] On met à jour le token
=========================================================*/
/* (1) On crée un nouveau token */
$new_token = sessionManager::secure_sha1( uniqid() );
$new_token = sessionManager::secure_hash( uniqid() );
/* (2) On applique le nouveau token */
$update_token = Database::getPDO()->prepare("UPDATE warehouse

View File

@ -11,8 +11,8 @@
/*************************/
/* SECURE SHA1 ALGORITHM */
/*************************/
public static function secure_sha1($data){
return sha1( '">\[..|{@#))'.sha1($data.'_)Q@#((%*_$%(@#') );
public static function secure_hash($data){
return hash('sha256', '">\[..|{@#))'.hash('sha256', $data.'_)Q@#((%*_$%(@#') );
}

View File

@ -185,7 +185,7 @@
/* [5] Mot de passe
=========================================================*/
public function testPasswordSizeEqCorrect(){
$password_hash = \manager\sessionManager::secure_sha1('monmotdepasse');
$password_hash = \manager\sessionManager::secure_hash('monmotdepasse');
$this->assertEquals( 40, strlen($password_hash) );
$this->assertTrue( \manager\Checker::run('user.password', $password_hash) );
@ -199,7 +199,7 @@
}
public function testPasswordSizeSupIncorrect(){
$password_hash = \manager\sessionManager::secure_sha1('monmotdepasse').'a';
$password_hash = \manager\sessionManager::secure_hash('monmotdepasse').'a';
$this->assertGreaterThan( 40, strlen($password_hash) );
$this->assertFalse( \manager\Checker::run('user.password', $password_hash) );

View File

@ -7,7 +7,7 @@
=========================================================*/
public function testSecureSHA1(){
$plain = 'montexteclair';
$hash = \manager\sessionManager::secure_sha1($plain);
$hash = \manager\sessionManager::secure_hash($plain);
// Verification desuiee
$this->assertEquals(40, strlen($hash) );

View File

@ -6,18 +6,19 @@
$hash = 'mySecretKey';
$hash = 'password';
$hashes = [];
for( $i = 0 ; $i < 1000 ; $i++ ){
$hash = sessionManager::secure_sha1($hash);
$hash = sessionManager::secure_hash($hash);
if( in_array($hash, $hashes) )
if( isset($hashes[$hash]) )
var_dump('already');
$hashes[] = $hash;
$hashes[$hash] = null;
var_dump($hash);
}

View File

@ -70,8 +70,16 @@
// Liste des machines
foreach( $answer->get('machines') as $machine){
$clusters = new Repo('machine/getClusters', array($machine['id_machine']));
$clusters = $clusters->answer();
/* (1) On récupère les groupes de la machine */
$clustersReq = new ModuleRequest('machineDefault/getClusters', [
'id_machine' => $machine['id_machine']
]);
$clustersRes = $clustersReq->dispatch();
/* (2) Gestion si erreur */
if( $clustersRes->error == ManagerError::Success ) $clusters = $clustersRes->get('clusters');
else $clusters = [];
echo "<article class='inline-box' id='".$machine['id_machine']."'>";
// Nom de la machine

View File

@ -72,8 +72,16 @@
// Liste des utilisateurs
foreach( $answer->get('users') as $user){
$clusters = new Repo('user/getClusters', [$user['id_user']]);
$clusters = $clusters->answer();
/* (1) On récupère les groupes de la machine */
$clustersReq = new ModuleRequest('userDefault/getClusters', [
'id_user' => $user['id_user']
]);
$clustersRes = $clustersReq->dispatch();
/* (2) Gestion si erreur */
if( $clustersRes->error == ManagerError::Success ) $clusters = $clustersRes->get('clusters');
else $clusters = [];
echo "<article class='inline-box' id='".$user['id_user']."'>";