Protection d'un site (architecture pseudo-frame evolué)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 090 fois - Téléchargée 29 fois

Contenu du snippet

Bon on pourra sans doute amméliorer ce script. Lorsque l'on monte un site en pseudo-frames, il est souvent préférable que le visiteur ne puisse pas accéder à une rubrique sans passer par la page index. Par exemple :

Adresse normale :
http://www.monsite.com/index.php?rub=2

Le visiteur (mal attentionné) tape :
http://www.monsite.com/page.php
et il obtient une des rubriques du site. Cela peut présenter un gros trou de sécurité !

Voici une solution que je dois en grande partie à Lorenzo et bien d'autres qui m'on aidé sur le forum de phpinfo.net

Source / Exemple :


Vous avez un fichier conf.inc.php : 

<? 
/* Fichier à adapter aux différentes configurations */ 
         
// Chemin d'acces global 
// (ne pas oublier le / à la fin) 
// ATTENTION AU MAJUSCULE/MINUSCULE !!! 
$global_acces = 'http://localhost/Projet2/'; 
                 
// Fichier acces membre 
$pageindex = 'espace_membre.php'; 
?> 

Un fichier check_acces.php : 

<? 
function check_access($url) 
{ 
  include ('./var_conf.inc.php');  /* ça c'est pas top, j'sais pas comment faire autrement */
  $url = explode("?",$url); 

  // url normal pour accéder à la page 
  $url_normal = "$global_acces" . "$pageindex"; 

  If ($url[0] != $url_normal) 
  { 
        return false; 
  } 
  else 
  { 
        return true; 
  } 
} 

// On verifie si le chemin d'acces à la page 
// est correct. 
if (!check_access($HTTP_REFERER)) 
{ 
   echo "Désolé, mais vous n'avez pas accès à cette page<P>\n"; 
   echo "<A HREF=\"index.php\">Retour</A><P>"; 
   exit(); 
} 
?>

Conclusion :


Il vous suffit ensuite de faire sur toute les pages que vous souhaitez protéger :

<? include('check_access.php'); ?>

A voir également

Ajouter un commentaire

Commentaires

philoulheinz
Messages postés
6
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
21 octobre 2006
-
je suis en train de faire un site avec des pseudos frames. Et je me suis dit que je ne pouvais pas laisser passer une aussi grosse faille. Alors g tester ton code mais sans succès ( amon avis c fort probable que ce soit moi qui mi suis mal pris).

Alors en me creusant la tete je me suis dit que les sites php nuke utilise le principe des pseudos frames. (g fait le test : "http://www.monsite.com/index.php?rub=2" =
"http://www.monsite.com/page.php" pour voir ce que ça faisait et ça donne ceci : "You can't access this file directly..." alors g chercher ds le code source de phpnuke. Il suffit juste de mettre ceci en haut des pages que tu ne veux pas quelles soient accédées directement :

if (!eregi("index.php", $_SERVER['PHP_SELF']))
{
die ("You can't access this file directly...");
}

et apparement ça marche.
pyroflo
Messages postés
323
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
17 mai 2005
-
Que tu passes par http://monsite.com/?p=page ou bien http://monsite.com/page.php le referrer contiendra toujours le nom de domaine...
CrazyDeep
Messages postés
2
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
3 avril 2003
-
<SCRIPT LANGUAGE="JavaScript">
<!--
if (document.referrer.indexOf("http://monsite.com") == -1) {
window.location.replace("http://monsite.com");
}
// End -->
</script>
encore mieux. VIVE java script
CrazyDeep
Messages postés
2
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
3 avril 2003
-
<?
$url = $HTTP_REFERER;
$net_url = strtolower($url);//on met tout en minuscule
$verif_url = substr("$net_url", 0, 14);// 14 est le nb de lettre du debut de l'adresse
if ($verif_url!="http://monadresse.com")//on verifi quel commence par
{
print("Vous ne pouvez pas acceder a cette zone ");
exit();
}
Une soluce simple mais efficace.
matrey
Messages postés
399
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
6 septembre 2004
-
On peut aussi faire :
if (!eregi("mapage.php", $PHP_SELF)) {
die ("Accès direct impossible");
}
Ca n'autorise pas l'accès direct, seulement l'inclusion dans une autre page php.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.