Question

Ceci est une application de moteur d'essai avec 5 papiers fixé par me..as 5 pages php

Flux de l'application

login.html

check.php // pour vérifier si les informations d'identification r droite

si elle est correcte puis

main.php // utilisateur clique sur "prendre test" dans cette page qui l'affiche 1 des 5 papiers ...

mais une fois que je suis connecté je peux changer l'URL pour l'url du papier test i want..the noms de papier r 2.PHP 1.php ....

Comment puis-je arrêter ça ... ??

if(!isset($_SESSION['page'])//Tp
        continue;           //Tp
else
 {
   header('Location:login.php');
   exit;
 }                               //Tp
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];//tp

est-ce correct ... comme je l'ai dit il y a 5 pages ....

à la page eac j'ai ce code ....

je vérifie si la variable de session est définie .... si elle est définie ... cela signifie qu'il a déjà visité la page ..... mais ce travail ne marche pas le code ... Ai-je utilisé la _SESSION variable [ 'page'] avant de le déclarer ???

Était-ce utile?

La solution

Les problèmes que vous rencontrez peuvent être résolus la plupart du temps en organisant votre code autour d'un script de gestionnaire par défaut. (Voir mes directives ci-dessous.)

Il existe deux méthodes de base pour transmettre des informations à un tel script (comme je l'ai dit dans un commentaire ci-dessus). La méthode de base est par une variable GET, comme http://www.example.com/main.php?p=1.

Si vous voulez avoir plus de visiteurs URL convivial, vous pouvez utiliser un RewriteRule dans un fichier .htaccess pour convertir les belles URL dans les URL que votre gestionnaire comprendront. (Vous aurez besoin mod_rewrite activée.)

Cela peut être surpuissant pour cette question particulière, mais voici quelques directives pour les applications Web sécurisées. Je pense qu'ils sont tous pertinents:

  1. Mettez vos informations sensibles en dehors de la racine web public .
  2. Par défaut, ne pas afficher des informations . activer uniquement l'affichage des informations si l'utilisateur est autorisé positivement.
  3. Idéalement, cela inclut les URL (s'ils tapent dans une URL valide, mais ils ne sont pas autorisés, ne laissez pas leur faire savoir qu'ils ont atteint une URL valide). La première consiste à rediriger (définir l'en-tête de l'emplacement comme vous faites) à la page de connexion, s'ils ne sont pas autorisés.
  4. Créer un script de gestionnaire par défaut. Ce script central inclut tous les fichiers nécessaires et appeler toutes les fonctions nécessaires. Passer toutes les informations de demande à ce gestionnaire, et l'ont sortie tout le code HTML.
  5. Obligation de # 3: Encapsulate votre code dans les fonctions et les classes. De cette façon, votre gestionnaire par défaut peut les appeler quand il est prêt, seulement si vous avez besoin, et non pas simplement parce qu'ils se trouvaient à inclure. Cela vous permet de contrôler beaucoup plus sur le flux de votre application.
  6. Au lieu de echoing HTML dans des endroits aléatoires tout au long de votre code, retourner toutes les sorties HTML à votre gestionnaire principal , qui collectera et sortie tout en un seul endroit quand il est prêt. echos aléatoires dispersés font autour de plus facile pour les trous de sécurité aux cultures vers le haut.
  7. Ne pas faire confiance à l'entrée utilisateur . Si vous allez utiliser une valeur que vous obtenez de $_GET ou $_POST, assurez-vous qu'il est une valeur valide avant de l'utiliser.

Modifier

(Ceci est plus spécifique et dirigé vers votre code tel qu'il est en ce moment)

Il y a 3 raisons pour lesquelles votre code ne fonctionneront pas comme prévu à:

  1. Vous avez laissé une parenthèse fermante sur la première if(!isset($_SESSION['page']) ligne.

  2. La façon dont votre code est écrit, si $_SESSION['page'] est déjà défini lorsque l'utilisateur visite la page, ils seront redirigés vers la page de connexion. Vous pouvez résoudre ce problème en mettant l'header('Location:login.php'); exit; dans la clause if et la suppression de la clause de else complètement:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. Vous devez définir $_SESSION['page'] quand leur première connexion afin qu'ils soient en mesure d'afficher la première page.

Je vous recommande d'utiliser un entier pour $_SESSION['page'] au lieu du nom du script. De cette façon, vous pouvez définir $_SESSION['page'] à 1 lorsqu'ils se connectent, et chaque fois qu'ils voient avec succès une page, incrémenter $_SESSION['page'] par un. Considérez $_SESSION['page'] signifie le papier suivant cet utilisateur est autorisé à voir .

Vous pouvez définir un $pageid sur chaque papier. Chaque fois qu'ils essaient d'afficher une page, si $_SESSION['page'] est inférieure à $pageid, ne les laissez pas voir la page.

Autres conseils

La meilleure façon est de construire véritable authentification et d'autorisation dans votre application. Ensuite, l'URL qui sert le papier doit vérifier que l'utilisateur est autorisé à afficher la page avant de le servir.

Tout ce que vous faites dans check.php, faites-le sur la page papier lui-même.

Beaucoup de solutions de rechange. Un couple:

  • Ne pas encoder le nom des noms de papier dans l'URL, mais retourner le contenu du papier sélectionné à partir d'une page appelée, par exemple, test paper.php.

  • suivre les documents que l'utilisateur a le droit de voir dans la session de l'utilisateur. Vérifiez sur chaque page de papier test si l'utilisateur est autorisé à voir celui-ci et retourner un 403 Forbidden (ou une page d'erreur) si elles ne sont pas.

Beaucoup plus, je suis sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top