From 594615fe9092ded829529d13d27e1094b0ac2661 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 30 Dec 2015 17:02:17 +0100 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20des=20conditions=20du=20c?= =?UTF-8?q?heckParam();=20et=20d=C3=A9ploiement=20d=C3=A9but=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 2 +- manager/modules.php | 28 +++++-------- manager/security.php | 97 +++++++++++++++++++++++++++++++++++++++++++- manager/user.php | 32 +++++++-------- test.php | 15 +++---- 5 files changed, 127 insertions(+), 47 deletions(-) diff --git a/manager/database.php b/manager/database.php index 8d7c745..309e155 100755 --- a/manager/database.php +++ b/manager/database.php @@ -38,7 +38,7 @@ class DataBase{ /* retourne une instance de la classe */ public static function getInstance(){ if( DataBase::$instance == null ){ - if( $_SERVER['HTTP_HOST'] == 'sid.local' ) // si co en local + if( $_SERVER['HTTP_HOST'] == 'sid' ) // si co en local DataBase::$instance = new DataBase("localhost", "sid2", "php", "Qt358nUdyeTxLDM8"); else // si co en ligne DataBase::$instance = new DataBase("mysql.hostinger.fr", "u712664263_sid", "u712664263_php", "Qt358nUdyeTxLDM8"); diff --git a/manager/modules.php b/manager/modules.php index 8d396be..3a6fac3 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -44,11 +44,9 @@ class modulesManager{ } $areSetParam = isset($request->etudiant) && isset($request->semestre) && isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->semestre) && is_string($request->annee); // si c'est des strings - $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->semestre) && is_numeric($request->annee); // des bon types - $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format - $semestreCheck = $etudiantCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format - $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $etudiantCheck = $areSetParam && checkParam($request->etudiant, 'utilisateur.identifiant'); // identifiant bon format + $semestreCheck = $etudiantCheck && checkParam($request->semestre, 'semestre.rang'); // semestre (rang) bon format + $anneeCheck = $semestreCheck && checkParam($request->annee, 'semestre.annee'); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons @@ -74,11 +72,9 @@ class modulesManager{ /**********************************************/ case 'getByEnseignant': if( permission('teacher') || permission('admin') ){ - $areSetParam = isset($request->enseignant)&& isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->enseignant) && is_string($request->annee); // si c'est des strings - $nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->annee); // des bon types - $enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // nom bon format - $anneeCheck = $enseignantCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $areSetParam = isset($request->enseignant)&& isset($request->annee); // les arguments existent + $enseignantCheck = $areSetParam && checkParam($request->enseignant, 'utilisateur.identifiant'); // nom bon format + $anneeCheck = $enseignantCheck && checkParam($request->annee, 'semestre.annee'); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons $semestreList = DataBase::getInstance()->getModulesByUEByEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); @@ -105,10 +101,8 @@ class modulesManager{ /******************************************/ case 'getByYear': if( permission('master') || permission('admin') ){ - $areSetParam = isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->annee); // si c'est des strings - $nEmptyParam = $typeOkParam && is_numeric($request->annee); // des bon types - $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $areSetParam = isset($request->annee); // les arguments existent + $anneeCheck = $areSetParam && checkParam($request->annee, 'semestre.annee'); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons $semestreList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); // true = on veut les groupes inscrits à chaque module @@ -134,10 +128,8 @@ class modulesManager{ /**********************************/ case 'getMCC': if( permission('admin') ){ - $areSetParam = isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->annee); // si c'est des strings - $nEmptyParam = $typeOkParam && is_numeric($request->annee); // des bon types - $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $areSetParam = isset($request->annee); // les arguments existent + $anneeCheck = $areSetParam && checkParam($request->annee, 'semestre.annee'); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons $semestreList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); diff --git a/manager/security.php b/manager/security.php index 1495daa..91c96fd 100755 --- a/manager/security.php +++ b/manager/security.php @@ -130,13 +130,108 @@ * */ function checkParam($variable, $type=null){ - $checker = isset($variable); + $checker = isset($variable) && !is_null($variable); // traitement en fonction du type switch($type){ + /* [1] Types de la base de données + =======================================*/ + + /* (1) Global */ + case 'auto_increment_id': + return $checker && is_numeric($variable) && $variable <= 2147483647 && $variable >= -2147483647; + break; + + /* (2) Utilisateur */ case 'utilisateur.identifiant': return $checker && is_string($variable) && preg_match('/^[\w -]{3,50}$/i', $variable); break; + case 'utilisateur.prenom': + return $checker && is_string($variable) && preg_match('/^[a-z -]{3,50}$/i', $variable); + break; + case 'utilisateur.nom': + return $checker && is_string($variable) && preg_match('/^[a-z -]{3,50}$/i', $variable); + break; + case 'utilisateur.sexe': + return $checker && is_numeric($variable) && $variable >= 0 && $variable <= 1; + break; + case 'utilisateur.mail': + return $checker && is_string($variable) && strlen($variable) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $variable); + break; + case 'utilisateur.mdp': + return $checker && is_string($variable) && preg_match('/^[\w -]{4,100}$/i', $variable); + break; + case 'utilisateur.droits': + return $checker && is_string($variable) && preg_match('/^(?:master|student|admin|teacher)(,(?:master|student|admin|teacher)){0,4}$/i', $variable); + break; + + /* (3) Groupe */ + case 'groupe.nom': + return $checker && is_string($variable) && preg_match('/^[a-z0-9 -]{1,10}$/i', $variable); + break; + + /* (4) Formation */ + case 'formation.code': + return $checker && is_string($variable) && preg_match('/[\w]{0,10}/i', $variable); + break; + case 'formation.nom': + return $checker && is_string($variable) && preg_match('/[\w ]{0,100}/i', $variable); + break; + + /* (5) Module */ + case 'module.nom': + return $checker && is_string($variable) && preg_match('/[\w]{0,10}/i', $variable); + break; + case 'module.libelle': + return $checker && is_string($variable) && preg_match('/[\w ]{0,100}/i', $variable); + break; + + /* (6) UE */ + case 'UE.nom': + return $checker && is_string($variable) && preg_match('/[\w]{0,10}/i', $variable); + break; + case 'UE.libelle': + return $checker && is_string($variable) && preg_match('/[\w ]{0,100}/i', $variable); + break; + + /* (7) Semestre */ + case 'semestre.nom': + return $checker && is_string($variable) && preg_match('/[\w]{0,10}/i', $variable); + break; + case 'semestre.rang': + return $checker && is_numeric($variable) && $variable >= 0 && $variable <= 127; + break; + case 'semestre.annee': + return $checker && is_numeric($variable) && $variable >= 0; + break; + + /* (8) Contrôle */ + case 'controle.nom': + return $checker && is_string($variable) && preg_match('/[\w]{0,10}/i', $variable); + break; + case 'controle.libelle': + return $checker && is_string($variable) && preg_match('/^.{3,100}$/i', $variable); + break; + case 'controle.base': + return $checker && is_numeric($variable) && $variable >= 0; + break; + case 'controle.coefficient': + return $checker && is_numeric($variable); + break; + case 'controle.publication': + return $checker && is_numeric($variable) && $variable >= 0 && $variable <= 1; + break; + + /* (9) Note */ + case 'note.valeur': + return $checker && is_numeric($variable); + break; + + + + + /* [2] Types primitifs et secondaires + =======================================*/ case '': return $checker && is_string($variable); break; diff --git a/manager/user.php b/manager/user.php index 1d91c16..ab0eef7 100755 --- a/manager/user.php +++ b/manager/user.php @@ -42,11 +42,9 @@ class userManager{ /* authentification (login) */ /****************************/ case 'authentification': - $areSetParam = isset($request->identifiant) && isset($request->mdp); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->identifiant) && is_string($request->mdp); // ils sont tous 2 des string - $nEmptyParam = $typeOkParam && strlen($request->identifiant) > 0 && strlen($request->mdp) > 0; // d'au moins 1 caractère - $identifiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->identifiant); // identifiant bon format - $mdpCheck = $identifiantCheck && preg_match('/^[\w -]{4,100}$/i', $request->mdp); // mdp bon format + $areSetParam = isset($request->identifiant) && isset($request->mdp); // les arguments existent + $identifiantCheck = $areSetParam && checkParam($request->identifiant, 'utilisateur.identifiant'); // identifiant bon format + $mdpCheck = $identifiantCheck && checkParam($request->mdp, 'utilisateur.mdp'); // mdp bon format if( $mdpCheck ) // si tout les params sont ok $answer->request = userManager::user_authentification($request->identifiant, $request->mdp); @@ -76,14 +74,12 @@ class userManager{ case 'create': if( false && permission('admin') ){ $areSetParam = isset($request->identifiant) && isset($request->prenom) && isset($request->nom) && isset($request->mail) && isset($request->mdp) && isset($request->droits); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->identifiant) && is_string($request->prenom) && is_string($request->nom) && is_string($request->mail) && is_string($request->mdp) && is_string($request->droits); // ils sont tous 2 des string - $nEmptyParam = $typeOkParam && strlen($request->identifiant) > 0 && strlen($request->prenom) > 0 && is_string($request->nom) && is_string($request->mail) && is_string($request->mdp) && is_string($request->droits); // d'au moins 1 caractère - $identifiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->identifiant); // identifiant bon format - $prenomCheck = $identifiantCheck && preg_match('/^[a-z -]{3,50}$/i', $request->prenom); // prenom bon format - $nomCheck = $prenomCheck && preg_match('/^[a-z -]{3,50}$/i', $request->nom); // nom bon format - $mailCheck = $nomCheck && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $request->mail); // mail bon format - $mdpCheck = $mailCheck && preg_match('/^[\w -]{4,100}$/i', $request->mdp); // mdp bon format - $droitsCheck = $mdpCheck && is_int(array_search($request->droits, ['student', 'teacher', 'master', 'admin'])); // droits bon format + $identifiantCheck = $areSetParam && checkParam($request->identifiant, 'utilisateur.identifiant'); // identifiant bon format + $prenomCheck = $identifiantCheck && checkParam($request->prenom, 'utilisateur.prenom'); // prenom bon format + $nomCheck = $prenomCheck && checkParam($request->nom, 'utilisateur.nom'); // nom bon format + $mailCheck = $nomCheck && checkParam($request->mail, 'utilisateur.mail'); // mail bon format + $mdpCheck = $mailCheck && checkParam($request->mdp, 'utilisateur.mdp'); // mdp bon format + $droitsCheck = $mdpCheck && checkParam($request->droits, 'utilisateur.droits'); // droits bon format if( $droitsCheck ){ // si tout les paramètres sont bons $answer->request = DataBase::getInstance()->creerUtilisateur($request->identifiant, $request->prenom, $request->nom, $request->mail, $request->mdp, $request->droits); @@ -144,11 +140,11 @@ class userManager{ */ case 'updateRole': if( permission('admin') && $_SESSION['annee'] >= getCurrentYear() ){ - $identifiantCheck = isset($request->identifiant) && is_string($request->identifiant) && preg_match('/^[\w -]{3,50}$/i', $request->identifiant); // identifiant au bon format - $adminCheck = $identifiantCheck && ( is_null($request->admin) || is_bool($request->admin) ); // admin ok - $masterCheck = $adminCheck && ( is_null($request->master) || is_bool($request->master) ); // master ok - $addModuleCheck = $masterCheck && ( is_null($request->addModule) || is_numeric($request->addModule) ); // addModule ok - $delModuleCheck = $addModuleCheck && ( is_null($request->delModule) || is_numeric($request->delModule) ); // delModule ok + $identifiantCheck = isset($request->identifiant) && checkParam($request->identifiant, 'utilisateur.identifiant'); // identifiant au bon format + $adminCheck = $identifiantCheck && ( is_null($request->admin) || is_bool($request->admin) ); // admin ok + $masterCheck = $adminCheck && ( is_null($request->master) || is_bool($request->master) ); // master ok + $addModuleCheck = $masterCheck && ( is_null($request->addModule) || is_numeric($request->addModule) ); // addModule ok + $delModuleCheck = $addModuleCheck && ( is_null($request->delModule) || is_numeric($request->delModule) ); // delModule ok $groupeOpt = isset($request->groupe) && is_numeric($request->groupe); if( $groupeOpt ) $groupe = $request->groupe; diff --git a/test.php b/test.php index 5d8a450..c824ba4 100755 --- a/test.php +++ b/test.php @@ -47,13 +47,10 @@ require_once __ROOT__.'/manager/security.php'; debug(); // var_dump( $_SESSION ); +// [1] On récupère tous les UE d'un étudiant +$uelist = DataBase::getInstance()->getUEsEtudiant('mrd1609a', 16, 2015); +var_dump( $uelist ); -// require_once __ROOT__.'/manager/database.php'; -// $moyenneUEetu = DataBase::getPDO()->query("SELECT * FROM utilisateur"); -// var_dump( $moyenneUEetu->fetchAll() ); - - -var_dump( DataBase::getInstance()->listeUtilisateursRole(2015) ); @@ -81,7 +78,7 @@ var_dump( DataBase::getInstance()->listeUtilisateursRole(2015) ); // $_SESSION['annee'] = 2015; -// require_once __ROOT__.'/manager/groups.php'; +require_once __ROOT__.'/manager/security.php'; // $_SESSION['identifiant'] = 'modele'; // afin de lire le fichier @@ -186,7 +183,7 @@ var_dump( DataBase::getInstance()->listeUtilisateursRole(2015) ); /*** RETOURNE LE SEMESTRE COURANT D'UN ETUDIANT ***/ - // require_once __ROOT__.'/manager/groups.php'; +require_once __ROOT__.'/manager/security.php'; // $request = new stdClass(); // $answer = new stdClass(); @@ -224,7 +221,7 @@ var_dump( DataBase::getInstance()->listeUtilisateursRole(2015) ); /*** CRÉATION GROUPE ***/ - // require_once __ROOT__.'/manager/groups.php'; +require_once __ROOT__.'/manager/security.php'; // $request = new stdClass(); // $answer = new stdClass();