par
OniTiep » 15 juil. 2007, 18:30
Pour bloquer l'accés direct à une page en fixant l'URL il faut que chaque lien du site se présente ainsi:
Code : Tout sélectionner
<a href=\"{$GLOBALS["APPLI"]["URL"]}index.php3?page=creat_ev&hier={$_SESSION['eb_param']['page']}\">Créer un événement</a>
['eb_param']['page'] est la page voulue, donc la page en cours
ce qui donne:
http://serveur/appli/index.php3?page=creat_ev&hier=acc
Pour rappel dans index je garde tout les paramètres de l'URL dans une variable de session, un tableau qui dans notre cas vaut:
[eb_param][page]=creat_ev
[eb_param][hier]=acc
Lors de la première connexion, il ya un test, enfin le else d'un test, qui répond:
function vospapiers(){
$valid = 1;
# on vérifie déjà si les variables de contrôle existe
if (isset($_SESSION['eb_ctrl'])){
#--------------
# l'emplacement de mes tests
#---------------
}#fin de if (isset($_SESSION['eb_ctrl']
else{
$_SESSION['eb_ctrl']['oki'] = "first";
$_SESSION['eb_ctrl']['url'] = "connex";
$_SESSION['eb_ctrl']['referer'] = "connex";
}
$_SESSION['valid'] = $valid;
return $valid;
}# fin de function vospapiers()
Lors de la première connexion je renseigne donc:
['eb_ctrl']['oki'] = "first" <--- cette variable ne sert que pour le debug

['eb_ctrl']['url'] = "connex"
['eb_ctrl']['referer'] = "connex"
Maintenant je peux tester que l'utilisateur à bien cliquer sur un lien, pour info l'appel de vospapiers() est la toute première chose que index fait.
A la place prévu il faut rajouter:
if (isset ($_SESSION['eb_param']['hier']) && $_SESSION['eb_ctrl']['referer'] != $_SESSION['eb_param']['hier']){
$_SESSION['eb_ctrl']['oki'] = "pas oki";
$valid = 0;
}
if (isset($_REQUEST['page'])){
$_SESSION['eb_ctrl']['referer'] = $_SESSION['eb_param']['page'];
}
Avant l'appel à header:
Au premier if:
[eb_param][hier] est égale à la deuxième page précédente et [eb_param][referer] aussi.
Au deuxième if:
[eb_param][hier] ne change pas mais [eb_param][referer] devient la page précédente.
vospapiers() se termine et index sauvegarde les paramètres, alors [eb_param][hier] vaut la page précédente et on appel header:
retour dans vospapiers() où
[eb_param][hier] et [eb_param][referer] sont égale à la page précédente.
La seul cas où l'utilisateur peut réussir à forcer l'affichage d'une page est de mettre la bonne valeur de [hier] dans l'URL, il doit mettre le nom utiliser pour la dernière page consultée.
Je pourrais crypter [hier] avec l'heure de connexion de l'utilisateur mais ça serait superflu, déjà que ce que j'ai fait c'était juste pour le chalenge de pas utiliser la variable REFERER (chalenge qui m'a fait perdre 2 jours XD), je vais pas abuser
Voilà si vous avez des questions n'hésitez pas
EDIT: un modo pourrait metttre [Résolu] ??? Comme j'écrit le premier post en invité je peux pas l'éditer

...

... merci

Pour bloquer l'accés direct à une page en fixant l'URL il faut que chaque lien du site se présente ainsi:
[code]<a href=\"{$GLOBALS["APPLI"]["URL"]}index.php3?page=creat_ev&hier={$_SESSION['eb_param']['page']}\">Créer un événement</a>[/code]
['eb_param']['page'] est la page voulue, donc la page en cours :idea:
ce qui donne:
http://serveur/appli/index.php3?page=creat_ev&hier=acc
Pour rappel dans index je garde tout les paramètres de l'URL dans une variable de session, un tableau qui dans notre cas vaut:
[eb_param][page]=creat_ev
[eb_param][hier]=acc
Lors de la première connexion, il ya un test, enfin le else d'un test, qui répond:
[php]
function vospapiers(){
$valid = 1;
# on vérifie déjà si les variables de contrôle existe
if (isset($_SESSION['eb_ctrl'])){
#--------------
# l'emplacement de mes tests
#---------------
}#fin de if (isset($_SESSION['eb_ctrl']
else{
$_SESSION['eb_ctrl']['oki'] = "first";
$_SESSION['eb_ctrl']['url'] = "connex";
$_SESSION['eb_ctrl']['referer'] = "connex";
}
$_SESSION['valid'] = $valid;
return $valid;
}# fin de function vospapiers()[/php]
Lors de la première connexion je renseigne donc:
['eb_ctrl']['oki'] = "first" <--- cette variable ne sert que pour le debug ;)
['eb_ctrl']['url'] = "connex"
['eb_ctrl']['referer'] = "connex"
Maintenant je peux tester que l'utilisateur à bien cliquer sur un lien, pour info l'appel de vospapiers() est la toute première chose que index fait.
A la place prévu il faut rajouter:
[php] if (isset ($_SESSION['eb_param']['hier']) && $_SESSION['eb_ctrl']['referer'] != $_SESSION['eb_param']['hier']){
$_SESSION['eb_ctrl']['oki'] = "pas oki";
$valid = 0;
}
if (isset($_REQUEST['page'])){
$_SESSION['eb_ctrl']['referer'] = $_SESSION['eb_param']['page'];
}[/php]
Avant l'appel à header:
Au premier if:
[eb_param][hier] est égale à la deuxième page précédente et [eb_param][referer] aussi.
Au deuxième if:
[eb_param][hier] ne change pas mais [eb_param][referer] devient la page précédente.
vospapiers() se termine et index sauvegarde les paramètres, alors [eb_param][hier] vaut la page précédente et on appel header:
retour dans vospapiers() où
[eb_param][hier] et [eb_param][referer] sont égale à la page précédente.
La seul cas où l'utilisateur peut réussir à forcer l'affichage d'une page est de mettre la bonne valeur de [hier] dans l'URL, il doit mettre le nom utiliser pour la dernière page consultée.
Je pourrais crypter [hier] avec l'heure de connexion de l'utilisateur mais ça serait superflu, déjà que ce que j'ai fait c'était juste pour le chalenge de pas utiliser la variable REFERER (chalenge qui m'a fait perdre 2 jours XD), je vais pas abuser :lol: :lol:
Voilà si vous avez des questions n'hésitez pas :wink:
[i]EDIT:[/i] un modo pourrait metttre [Résolu] ??? Comme j'écrit le premier post en invité je peux pas l'éditer :oops: ... :roll: ... merci :D