Bonjour à tous.
Je suis sur la fin de projet d'un CMS, et je fais un relecture pour vérifier la sécurité de mes pages.
je me suis aperçu que mes session étaient gérées uniquement par un session_start() dès le simple visiteur.
j'ai donc fais un petit script qui permet de faire une autentification de session plus complète.
Je voudrais savoir ce que vous en pensez.
Est-ce suffisant, sachant que j'utilise des variables de session pour les différents acces ( par exemple pour admin: if ($_SESSION['level'] > 2) ...), dans des requetes sql (par exemple SELECT * FROM 'matable' WHERE level <= $_SESSION['level']) ou encore pour reperer l'auteur d'un messages / news ... (par exemple if ($donnees['auteur'] == $_SESSION['pseudo'])
Voila
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php //definir les robots connu dans un array $robotsarray = array( "Googlebot", "Slurp", "Fast", "Scooter", "VoilaBot", ); $isrobot = false; //Verifier si le visiteur est un robot connu foreach($robotsarray as $spider) { if (eregi($spider, $_SERVER['HTTP_USER_AGENT'])) { $isrobot = true; break; } } //si ce n'est pas le cas, on démarre la session if(!$isrobot){ session_start(); //ici on crée/verifie une variable d'identification (hachage de l'id du site(unique) + user_agent) if (!isset($_SESSION[CONFIGNAME]['initiated'])) { session_regenerate_id(); $_SESSION[CONFIGNAME]['initiated'] = true; } if (isset($_SESSION[CONFIGNAME]['HTTP_USER_AGENT'])) { if ($_SESSION[CONFIGNAME]['HTTP_USER_AGENT'] != md5($config_siteID.$_SERVER['HTTP_USER_AGENT'])) { //la variable est differente de celle enregistrée précedement: erreur -> retour au login session_destroy(); header("Location: index.php?com=users&option=login&autherror"); } } else { //si la variable n'existe pas, on la crée (première visite) $_SESSION[CONFIGNAME]['HTTP_USER_AGENT'] = md5($config_siteID.$_SERVER['HTTP_USER_AGENT']); } //si un nom d'utilisateur est defini, on verifie une seconde varaible definie lors du login if(isset($_SESSION[CONFIGNAME]['pseudo']) OR isset($_SESSION[CONFIGNAME]['id']) OR isset($_SESSION[CONFIGNAME]['level'])) { if (isset($_SESSION[CONFIGNAME]['user_session'])) { //Ne faites pas attention a ça; c'est simplement ma fonction sql. $req_user = $db->select('users', 'WHERE id="'.intval($_SESSION[CONFIGNAME]['id']).'" AND username="'.mysql_real_escape_string(htmlspecialchars($_SESSION[CONFIGNAME]['pseudo'])).'" AND level="'.intval($_SESSION[CONFIGNAME]['level']).'"'); if(is_array($req_user)) $user = $req_user[0]; if ($_SESSION[CONFIGNAME]['user_session'] != sha1($user['register_date'].$user['password'].$user['register_ip'])) { session_destroy(); header("Location: index.php?com=users&option=login&autherror"); die(); } } else { session_destroy(); header("Location: index.php?com=users&option=login&autherror"); die(); } } } ?>
Pour finir, je voulais également demander quel sont les différent point de sécurité à vérifier, et si possible des petits liens.
j'ai déjà verifier ces differents points:
-les variables ( intval / htmlspecialchars/ mysql_real_esxape_string ...)
=> les magicquote dispence du addslashes non ?
-inclusions (toutes mes inclusions sont fixes, aucun include($var.'.php'); )
-mes requetes sql
Voila voia. Merci d'avance![]()
Partager