sid/manager/security.php

192 lines
6.4 KiB
PHP
Executable File

<?php
/***********************************************************
* *
* MANAGER DE SECURITE GENERALE ET SPECIFIQUE *
* *
************************************************************
* *
* [0] Constantes *
* [1] Session & redirection *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
***********************************************************/
/* [0] CONSTANTES
============================================================*/
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']) );
}
function debug(){
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
}
/*********** AURELIEN TROU DU CUL TU TE DEMERDE ***********/
function checkParams($arrayVar, $arrayType, $arrayRegex){
}
/* [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(){
/*
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
)
);
*/
session_start(); // on démarre la session
// on vérifie l'intégrité des variables session
$identifiantDefinedProperly = isset($_SESSION['identifiant']) && !empty($_SESSION['identifiant']) && gettype($_SESSION['identifiant']) == 'string' && strlen($_SESSION['identifiant']) > 0;
$droitsDefinedProperly = isset($_SESSION['droits']) && !empty($_SESSION['droits']) && is_array($_SESSION['droits']) && count($_SESSION['droits']) > 0;
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;
// si les variables sessions ne sont pas toutes les 2 correctes
if( !$identifiantDefinedProperly || !$droitsDefinedProperly ){
$_SESSION['identifiant'] = null; // on les initialise à NULL
$_SESSION['droits'] = array();
}
}session_init();
/* [2] GESTION DES PARAMÈTRES
============================================================*/
/** Vérifie le bon format, le bon type, ainsi que la bonne valeur des variables envoyées
*
* @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
*
* @return toutOK<Boolean> VRAI si variables bonnes / FAUX sinon
*
*/
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
// );
/* [1] Vérification de l'intégrité des tableaux
=============================================================================*/
$areArrays = is_array($tabVar) && is_array($tabForm); // si ce sont bien des tabeaux
$areNEmpty = $areArrays && count($tabVar) > 0; // si ils ne sont pas vides
$haveEqLen = $areNEmpty && count($tabVar) == count($tabForm); // si ils ont la même taille
if( !$haveEqLen ) // si toutes les conditions ne sont pas vérifiées
return false; // on retourne faux, car ne pourra pas être vrai
/* [2] Pour chaque variable on vérifie les données
=============================================================================*/
$checker = false; // on définit le checker à VRAI
// Vérification des types
// pour chaque variable
for($i = 0;i < count($tabVar);i++) {
switch($tabType[$i]) {
case 'string': if( is_string($tabForm[$i] )
$checker = is_string($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i];
break;
case 'int': if( is_string($tabForm[$i] )
$checker = is_int($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i];
break;
case 'numeric': if( is_string($tabForm[$i] )
$checker = is_numeric($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i];
break;
case 'array': if( is_numeric($tabForm[$i]) )
$checker = is_array($tabVar[i]) && count($tabVar[$i]) > 0;
break;
}
}
return $checker;
}
?>