2015-10-23 11:08:33 +00:00
|
|
|
<?php
|
2015-10-21 20:56:56 +00:00
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
* *
|
|
|
|
* MANAGER DE SECURITE GENERALE ET SPECIFIQUE *
|
|
|
|
* *
|
|
|
|
************************************************************
|
|
|
|
* *
|
|
|
|
* [0] Constantes *
|
|
|
|
* [1] Session & redirection *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
* *
|
|
|
|
***********************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/* [0] CONSTANTES
|
|
|
|
============================================================*/
|
2015-11-06 22:00:08 +00:00
|
|
|
function getPermissions(){ // retourne la liste des droits existants
|
|
|
|
return array('student', 'teacher', 'master', 'admin');
|
|
|
|
}
|
|
|
|
|
|
|
|
/** retourne l'état "connecté" de l'utilisateur courant
|
|
|
|
*
|
|
|
|
* @return state<Boolean> VRAI si connecté / FAUX si pas connecté
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function connected(){
|
|
|
|
return $_SESSION['identifiant'] != null;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** retourne si un utilisateur a un droit ou non
|
|
|
|
*
|
|
|
|
* @return permission<Boolean> VRAI si l'utilisateur a ce droit / FAUX s'il ne l'a pas
|
|
|
|
*
|
|
|
|
* */
|
|
|
|
function permission($perm){
|
|
|
|
return connected() && is_int( array_search($perm, $_SESSION['droits']) );
|
|
|
|
}
|
|
|
|
|
2015-10-21 20:56:56 +00:00
|
|
|
|
2015-10-28 17:08:12 +00:00
|
|
|
function debug(){
|
|
|
|
ini_set('display_errors',1);
|
|
|
|
ini_set('display_startup_errors',1);
|
|
|
|
error_reporting(-1);
|
|
|
|
}
|
2015-11-11 17:23:37 +00:00
|
|
|
|
2015-11-15 18:10:33 +00:00
|
|
|
function distinctArray($inArray){
|
|
|
|
$outArray = array();
|
|
|
|
|
|
|
|
foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur
|
|
|
|
if( !in_array($value, $outArray) )
|
|
|
|
array_push($outArray, $value);
|
2015-10-21 20:56:56 +00:00
|
|
|
|
2015-11-15 18:10:33 +00:00
|
|
|
return $outArray;
|
|
|
|
}
|
2015-10-21 20:56:56 +00:00
|
|
|
|
2015-11-13 23:47:11 +00:00
|
|
|
|
|
|
|
function secure_sha1($text){
|
|
|
|
$salt = '!!-vi_v93DFeswgf9de2b4d34ev!XX!x%';
|
|
|
|
$pepper = ':!;,°1832%0%QMSLµQ°++Q==!';
|
|
|
|
return sha1( sha1($salt.$text).$pepper );
|
2015-11-10 21:33:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-10-21 20:56:56 +00:00
|
|
|
/* [1] SESSIONS & REDIRECTION
|
|
|
|
============================================================*/
|
|
|
|
|
|
|
|
|
|
|
|
/* ETABLIT UNE SESSION SÉCURISÉE
|
|
|
|
*
|
|
|
|
* [1] Définit un id_session (PHPSESSID) unique et propre à une connection
|
|
|
|
* + propre à un navigateur (navigateur, version, OS, système X, ...)
|
|
|
|
* + propre à un accès (ip publique = box)
|
|
|
|
*
|
|
|
|
* [2] Démarre la session
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function session_init(){
|
2015-10-22 08:29:43 +00:00
|
|
|
/*
|
2015-10-21 20:56:56 +00:00
|
|
|
session_id( // on définit le session id
|
|
|
|
sha1( // qui est un Hash MD5
|
|
|
|
$_SERVER['HTTP_USER_AGENT']. // qui correspond aux infos système disponibles de l'utilisateur
|
|
|
|
$_SERVER['REMOTE_ADDR'] // et de son ip publique
|
|
|
|
)
|
|
|
|
);
|
2015-10-22 08:29:43 +00:00
|
|
|
*/
|
|
|
|
|
2015-10-21 20:56:56 +00:00
|
|
|
session_start(); // on démarre la session
|
|
|
|
|
|
|
|
|
|
|
|
// on vérifie l'intégrité des variables session
|
2015-10-28 17:08:12 +00:00
|
|
|
$identifiantDefinedProperly = isset($_SESSION['identifiant']) && !empty($_SESSION['identifiant']) && gettype($_SESSION['identifiant']) == 'string' && strlen($_SESSION['identifiant']) > 0;
|
2015-11-09 21:05:57 +00:00
|
|
|
$droitsDefinedProperly = isset($_SESSION['droits']) && !empty($_SESSION['droits']) && is_array($_SESSION['droits']) && count($_SESSION['droits']) > 0;
|
2015-11-06 22:00:08 +00:00
|
|
|
|
|
|
|
if( $droitsDefinedProperly )
|
|
|
|
foreach($_SESSION['droits'] as $droit)
|
|
|
|
if( !is_int( array_search($droit, getPermissions()) ) ) // si le droit n'est pas dans la liste des possibilitées, on retourne false
|
|
|
|
$droitsDefinedProperly = false;
|
|
|
|
|
2015-10-21 20:56:56 +00:00
|
|
|
|
|
|
|
// si les variables sessions ne sont pas toutes les 2 correctes
|
2015-11-06 22:00:08 +00:00
|
|
|
if( !$identifiantDefinedProperly || !$droitsDefinedProperly ){
|
2015-10-28 17:08:12 +00:00
|
|
|
$_SESSION['identifiant'] = null; // on les initialise à NULL
|
2015-11-06 22:00:08 +00:00
|
|
|
$_SESSION['droits'] = array();
|
2015-10-21 20:56:56 +00:00
|
|
|
}
|
2015-11-06 22:00:08 +00:00
|
|
|
}session_init();
|
2015-11-10 19:55:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* [2] GESTION DES PARAMÈTRES
|
|
|
|
============================================================*/
|
|
|
|
|
|
|
|
/** Vérifie le bon format, le bon type, ainsi que la bonne valeur des variables envoyées
|
|
|
|
*
|
2015-11-10 21:49:27 +00:00
|
|
|
* @param $tabVar tableau contenant l'ensemble des variables a vérifier
|
|
|
|
* @param $tabType tableau contenant l'ensemble des types
|
|
|
|
* @param $tabForm tableau contenant l'ensemble des conditions attendues
|
2015-11-10 19:55:40 +00:00
|
|
|
*
|
2015-11-10 21:49:27 +00:00
|
|
|
* @return toutOK<Boolean> VRAI si variables bonnes / FAUX sinon
|
|
|
|
*
|
2015-11-10 19:55:40 +00:00
|
|
|
*/
|
2015-11-10 21:49:27 +00:00
|
|
|
function checkParam($tabVar, $tabType, $tabForm) {
|
|
|
|
// FORMAT DE $tabVar
|
|
|
|
//
|
|
|
|
// $tabVar = array(
|
|
|
|
// $stringVar, // chaine de caractères
|
|
|
|
// $integerVar, // entier
|
|
|
|
// $numericVar, // nombre (sous forme d'entier ou de chaine)
|
|
|
|
// $arrayVar // tableau
|
|
|
|
// );
|
|
|
|
|
|
|
|
// FORMAT DE $tabType
|
|
|
|
//
|
|
|
|
// $tabType = array(
|
|
|
|
// 'string', // chaine de caractères
|
|
|
|
// 'int', // entier
|
|
|
|
// 'numeric', // nombre (sous forme d'entier ou de chaine)
|
|
|
|
// 'array' // tableau
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
|
|
// FORMAT DE $tabForm
|
|
|
|
//
|
|
|
|
// $tabType = array(
|
|
|
|
// '/^[a-z0-9]{1,5}$/i', // chaine de caractères
|
|
|
|
// '/^[0-9]+$/', // entier
|
|
|
|
// '/^[0-9]+$/', // nombre (sous forme d'entier ou de chaine)
|
|
|
|
// '??????' // tableau
|
|
|
|
// );
|
2015-11-10 19:55:40 +00:00
|
|
|
|
2015-11-11 14:50:05 +00:00
|
|
|
|
|
|
|
|
2015-11-10 19:55:40 +00:00
|
|
|
|
|
|
|
|
2015-11-10 21:49:27 +00:00
|
|
|
/* [1] Vérification de l'intégrité des tableaux
|
|
|
|
=============================================================================*/
|
|
|
|
$areArrays = is_array($tabVar) && is_array($tabForm); // si ce sont bien des tabeaux
|
2015-11-11 15:28:01 +00:00
|
|
|
$areNEmpty = $areArrays && count($tabVar) > 0; // si ils ne sont pas vides
|
2015-11-10 21:49:27 +00:00
|
|
|
$haveEqLen = $areNEmpty && count($tabVar) == count($tabForm); // si ils ont la même taille
|
2015-11-10 19:55:40 +00:00
|
|
|
|
2015-11-10 21:49:27 +00:00
|
|
|
if( !$haveEqLen ) // si toutes les conditions ne sont pas vérifiées
|
|
|
|
return false; // on retourne faux, car ne pourra pas être vrai
|
2015-11-10 19:55:40 +00:00
|
|
|
|
|
|
|
|
2015-11-10 21:49:27 +00:00
|
|
|
/* [2] Pour chaque variable on vérifie les données
|
|
|
|
=============================================================================*/
|
2015-11-11 15:28:01 +00:00
|
|
|
$checker = false; // on définit le checker à VRAI
|
2015-11-10 21:49:27 +00:00
|
|
|
|
2015-11-11 07:05:51 +00:00
|
|
|
// Vérification des types
|
|
|
|
|
2015-11-10 21:49:27 +00:00
|
|
|
// pour chaque variable
|
2015-11-11 16:41:10 +00:00
|
|
|
for($i = 0 ; $i < count($tabVar) ; $i++) {
|
2015-11-11 15:28:01 +00:00
|
|
|
|
|
|
|
switch($tabType[$i]) {
|
|
|
|
|
2015-11-11 16:41:10 +00:00
|
|
|
case 'string': if( is_string($tabForm[$i]) )
|
|
|
|
$checker = is_string($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i]);
|
2015-11-11 15:28:01 +00:00
|
|
|
break;
|
2015-11-11 16:41:10 +00:00
|
|
|
case 'int': if( is_string($tabForm[$i]) )
|
|
|
|
$checker = is_int($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i]);
|
2015-11-11 15:28:01 +00:00
|
|
|
break;
|
2015-11-11 16:41:10 +00:00
|
|
|
case 'numeric': if( is_string($tabForm[$i]) )
|
|
|
|
$checker = is_numeric($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i]);
|
2015-11-11 15:28:01 +00:00
|
|
|
break;
|
|
|
|
case 'array': if( is_numeric($tabForm[$i]) )
|
|
|
|
$checker = is_array($tabVar[i]) && count($tabVar[$i]) > 0;
|
|
|
|
break;
|
2015-11-11 07:05:51 +00:00
|
|
|
}
|
2015-11-10 19:55:40 +00:00
|
|
|
}
|
2015-11-11 15:28:01 +00:00
|
|
|
|
2015-11-11 07:05:51 +00:00
|
|
|
return $checker;
|
|
|
|
|
2015-11-10 19:55:40 +00:00
|
|
|
}
|
2015-11-11 17:23:37 +00:00
|
|
|
|
2015-11-11 17:25:22 +00:00
|
|
|
?>
|