1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
| <?
/*
module de d'identification
*/
// on commence par tester si l'agent utilisateur a deja une session valide
// si la session n'est pas enregistrée ou n'est pas valide
if ( !session_is_registered('sremoteadr') or session_my_test() != true ) {
$part = 'login'; // appelera le formulaire de login
// si la session est valide
} elseif ( session_is_registered('sremoteadr') and session_my_test() == true and session_is_registered('alevel') ) {
// on test si l'agent utilisateur a les droits nécessaires
@session_start();
if ( $_SESSION['alevel']['a'] != 'on' ) {
$part = 'login'; // appelera le formulaire de login
} elseif ( $_SESSION['alevel']['a'] == 'on' ) {
$part = 'pass';
}
}
// si des données on été postées
if ( isset($_POST['login']) and isset($_POST['pass']) ) {
trim($_POST['login']);
trim($_POST['pass']);
// on test si les login et mot de passe on la forme recquise
if ( empty($_POST['login']) or empty($_POST['pass']) or strlen($_POST['login']) != 8 or strlen($_POST['login']) != 8
or preg_match('#[^a-z0-9]#i',$_POST['login']) or preg_match('#[^a-z0-9]#i',$_POST['pass'])
) {
$part = 'relogin'; // echec de l'identification
// si les données d'itentification ont la forme attendue
} elseif ( !empty($_POST['login']) and !empty($_POST['pass']) and strlen($_POST['login']) == 8 and strlen($_POST['login']) == 8
and !preg_match('#[^a-z0-9]#i',$_POST['login']) and !preg_match('#[^a-z0-9]#i',$_POST['pass'])
) {
// on test l'existance des login mot de passe dans la base de donnée
include("func/_Conadm.php");
$prob = mysql_query('SELECT admin_alevel, admin_pseudo FROM s_admin WHERE admin_login=\''. mysql_real_escape_string($_POST['login']).'\' AND admin_pass=\''.mysql_real_escape_string($_POST['pass']). '\'',$conadm);
if ( $prob == true and mysql_num_rows($prob) == 1 ) {
$data = mysql_fetch_assoc($prob);
mysql_close($conadm); // on ferme la connexion a la base
session_my_startOpen(); // appel fonction maison pour initialisée la session sécurisée
$_SESSION['spseudo'] = $data['admin_pseudo'];
$_SESSION['alevel'] = unserialize(base64_decode($data['admin_alevel']));
mysql_free_result($prob);
$part = 'pass';
} else {
$part = 'relogin';
}
}
}
// a remplacer par les différentes pages html
if ($part == 'pass') {
echo 'session ok';
} elseif ($part == 'login') {
echo 'formulaire de login';
} else {
echo 'echec du login';
}
?>
<?
/*
Fonctions maison pour securiser les sessions
*/
//ouvre une session securisée
function session_my_startOpen() {
//on resteint la gestion des session à l'utilisation des cookies
if ( ini_get('session.use_cookies') == 0 ) {
ini_set('session.use_cookies', '1'); // gestion des session par le système de cookies
}
if ( ini_get('session.use_trans_sid') == 1 ) {
ini_set('session.use_trans_sid', '0'); // interdit la gestion des sessions avec GET
}
if ( ini_get('session.use_only_cookies') == 0 ) {
ini_set('session.use_only_cookies', '1'); // utiliser seulement les cookies pour la gestion des sessions
}
// on genère un nom de session aléatoir composé uniquement de chiffres, cela a pour effet
// de pousser php à regénérer de ssid à chaque fois
//fonction pour generer un nombre unique aléatoire
function make_seed()
{
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
session_name(rand(10000,99999)); // longueur 5 chiffres
session_start(); // initialise la session
// on recupère l'adresse ip et on la stock pour s'en servir comme token
$_SESSION['sremoteadr'] = md5($_SERVER['REMOTE_ADDR']);
}
// fonction pour tester la validité d'une session
function session_my_test () {
// si la variable de session qui doit contenir l'adresse ip n'existe pas, on return false tout de suite
if ( !session_is_registered('sremoteadr') ) {
return false;
// si la variable existe, on test sa concordance avec l'adresse ip de l'agent utilisateur
} elseif ( session_is_registered('sremoteadr') ) {
session_my_startRead(); //initialisation de la session
// ladresse ip concorde on return true
if ( $_SESSION['sremoteadr'] == md5($_SERVER['REMOTE_ADDR']) ) {
return true;
// sinon on return false
} else {
return false;
}
}
}
?> |
Partager