Frage

Dies ist eine Test-Engine-Anwendung mit 5 Papieren gesetzt von me..as 5 PHP-Seiten

Ablauf der Anwendung

login.html

check.php // um zu überprüfen, ob Anmeldeinformationen r rechts

Wenn korrekt dann

main.php // Benutzer klickt auf "take-Test" in dieser Seite, die zeigt ihn 1 der 5 Papiere ...

aber sobald ich in i angemeldet bin, kann einfach die URL auf die URL des Testpapiers ändern i want..the Papier Namen r 1.php 2.php ....

Wie verhindere ich dieses ... ??

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

ist das richtig ... wie ich sagte, es gibt 5 Seiten ....

in eac Seite i diesen Code haben ....

ich überprüfen, ob die Session-Variablen gesetzt .... Wenn es gesetzt ist ... es bedeutet, dass es bereits die Seite besucht hat ..... aber dieser Code funktioniert nicht ... habe ich benutze die Variable _SESSION [ 'Seite'] bevor es zu erklären ???

War es hilfreich?

Lösung

Die Probleme, die Sie haben könnten vor allem durch die Anordnung des Code um ein Standard-Handler-Skript gelöst werden. (Siehe meine Richtlinien unten.)

Es gibt zwei grundlegende Möglichkeiten, Informationen zu solchen einem Skript übergeben (wie ich in einem Kommentar sagte oben). Der einfachste Weg ist über ein GET-Variable, wie http://www.example.com/main.php?p=1.

Wenn Sie mehr Besucher freundliche URLs haben, können Sie ein RewriteRule in einer .htaccess Datei, um die schöne URLs in die URLs zu konvertieren, dass Ihr Handler verstehen. (Sie müssen mod_rewrite aktiviert.)

Das für diese spezielle Frage Overkill, aber hier sind ein paar Richtlinien für sichere Web-Anwendungen. Ich glaube, sie sind alle relevant:

  1. Legen Sie Ihre sensiblen Informationen außerhalb des öffentlichen Web-root .
  2. standardmäßig nicht angezeigt keine Informationen . Nur aktiviert von Informationen, um die Anzeige, wenn der Benutzer positiv autorisiert ist.
  3. Idealerweise dazu gehören URLs (wenn sie in einem gültigen URL eingeben, aber sie sind nicht berechtigt, lassen Sie sie nicht wissen, dass sie eine gültige URL erreicht). Eine Möglichkeit ist die Umleitung (die Location-Header wie du getan hast) auf die Login-Seite, wenn sie nicht autorisiert.
  4. Standard-Handler-Skript erstellen. Das zentrale Skript werden alle benötigten Dateien enthalten und alle benötigten Funktionen aufrufen. Führen Sie alle Anfragen an diesen Handler zur Verfügung und Ausgabe alle HTML.
  5. Voraussetzung für die # 3: kapseln Code in Funktionen und Klassen. Auf diese Weise Ihre Standard-Handler aufgerufen werden kann, wenn es fertig ist, nur, wenn Sie sie benötigen, und nicht nur, weil sie zufällig aufgenommen werden. Auf diese Weise können Sie viel mehr Kontrolle über den Fluss der App.
  6. Statt echoing HTML in zufälligen Stellen im gesamten Code, zurückkehren alle HTML-Ausgabe zu Ihrem Haupt-Handler , die sie sammeln und gibt es alles an einem Ort, wenn es fertig ist. Zufällige echos verstreut um es einfacher für Sicherheitslücken auftauchen.
  7. nicht vertrauen Benutzereingabe . Wenn Sie einen Wert, den Sie von $_GET oder $_POST bekommen verwenden werden, stellen Sie sicher, dass es ein gültiger Wert, bevor Sie es verwenden.

Edit:

(Diese spezielleren ist und in Richtung auf den Code gerichtet, wie es jetzt ist)

Es gibt 3 Gründe, Ihr Code wird nicht ausgeführt, wie Sie es erwarten:

  1. Sie links eine schließende Klammer in der ersten Zeile if(!isset($_SESSION['page']) aus.

  2. Die Art und Weise Ihren Code geschrieben wird, wenn $_SESSION['page'] bereits gesetzt ist, wenn der Benutzer besucht die Seite, werden sie auf der Login-Seite umgeleitet werden. Sie können dieses Problem beheben, indem Sie die header('Location:login.php'); exit; in der if Klausel setzen und Entfernen der else Klausel vollständig:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. Sie müssen Set $_SESSION['page'], wenn sie zum ersten Mal anmelden, damit sie die erste Seite sehen werden können.

Ich würde empfehlen, eine ganze Zahl für $_SESSION['page'] anstelle des Skriptnamens. Auf diese Weise können Sie $_SESSION['page'] auf 1 gesetzt, wenn sie sich anmelden, und jedes Mal, wenn sie sehen eine Seite erfolgreich, erhöhe $_SESSION['page'] um eins. Betrachten $_SESSION['page'] bedeuten das nächste Papier dieser Benutzer darf Ansicht .

Sie können einen $pageid auf jedem Papier gesetzt. Jedes Mal, wenn sie versuchen, eine Seite zu öffnen, falls $_SESSION['page'] weniger als $pageid, lassen Sie sie nicht die Seite.

Andere Tipps

Der beste Weg ist wahr, die Authentifizierung und Autorisierung in Ihre Anwendung zu erstellen. Dann wird die URL, die den Papierbedarf dient, um zu überprüfen, dass der Benutzer der Seite anzuzeigen erlaubt wird, bevor es zu dienen.

Was auch immer Sie in check.php tun, tun Sie es auf dem Papier Seite selbst.

Es gibt viele Alternativen. Ein paar:

  • Do den Namen der Papiernamen in der URL nicht kodieren aber den Inhalt des ausgewählten Papiers von einer Seite mit dem Namen zurückkehren, sagt sie, Test-paper.php.

  • die Papiere verfolgen der Benutzer berechtigt ist, in der Sitzung des Benutzers zu sehen. Überprüfen Sie in jedem Testpapierseite, ob der Benutzer, diese zu sehen erlaubt ist und gibt eine 403 Forbidden (oder eine Fehlerseite), wenn sie nicht sind.

Viel mehr, ich bin sicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top