2010-06-27 3 views
2

Dans mon domaine admin web j'ai en utilisant la logique très simple:Problème avec session_start(), ob_start() et de la sécurité

session_start(); ob_start(); 
if(!isset($_SESSION['user'])){ 
    header("Location: login.php"); 
} 
contents... 
ob_end_flush(); 

Oui cela fonctionne parfaitement, redirigez la page de connexion. Mais le point comique est que je peux voir le contenu de index.php (qui a protégé !!!) here Quel est le problème?

Répondre

5

Mettre un ob_end_clean et exit après l'appel header pour empêcher toute nouvelle exécution/sortie:

if (!isset($_SESSION['user'])) { 
    header("Location: login.php"); 
    ob_end_clean(); 
    exit; 
} 
8

Abra Kadabra

if(!isset($_SESSION['user'])){ 
    header("Location: login.php"); 
    die("GET LOST YO"); 
} 
+1

Mieux sans le message, mais la suppression du script a permis de résoudre le problème facilement. – animuson

+2

* Shrug *, les navigateurs ne devraient pas le voir de toute façon, puisque vous êtes redirigé. Et si quelqu'un est sournois alors ... eh bien, vous lui avez juste dit de se perdre, comme il aurait toujours dû: P – Robus

+0

Même si cela n'a pas d'importance dans ce cas, ce n'est toujours pas une bonne idée d'utiliser 'die()' n'importe où dans un site Web. –

1

Vous devez faire tout le contenu du script dans IF.

session_start(); 
ob_start(); 
if(isset($_SESSION['user'])){ 
    contents... 
} 
else { 
    header("Location: login.php"); 
ob_end_flush();