Domanda

Questa è un'applicazione del motore di test con 5 documenti impostati da me...come 5 pagine php

Flusso della domanda

Login.html

check.php // per verificare se le credenziali sono corrette

se corretto allora

main.php //l'utente fa clic su "fai il test" in questa pagina che gli mostra 1 dei 5 documenti...

ma una volta effettuato l'accesso posso semplicemente cambiare l'URL con l'URL del documento di prova che desidero... i nomi del documento r 1.php 2.php....

come posso fermare tutto questo...??

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

è corretto...come ho detto ci sono 5 pagine....

in ogni pagina ho questo codice....

Controllo se la variabile di sessione è impostata ... se è impostata ... significa che ha già visitato la pagina ..... ma questo codice non funziona ... Ho usato la variabile _session ['pagina' ] prima di dichiararlo ???

È stato utile?

Soluzione

I problemi che stai riscontrando potrebbero essere risolti per lo più organizzando il codice attorno a uno script di gestione predefinito.(vedi le mie linee guida qui sotto.)

Esistono due modi fondamentali per passare informazioni a tale script (come ho detto in un commento sopra).Il modo di base è tramite una variabile GET, come http://www.example.com/main.php?p=1.

Se desideri avere URL più adatti ai visitatori, puoi utilizzare a RewriteRule in un .htaccess file per convertire gli URL piacevoli negli URL che il tuo gestore capirà.(Avrai bisogno mod_rewrite abilitato.)

Potrebbe essere eccessivo per questa domanda particolare, ma ecco alcune linee guida per le app Web sicure.Penso che siano tutti rilevanti:

  1. Metti le tue informazioni sensibili al di fuori della radice web pubblica.
  2. Per impostazione predefinita, non visualizzare alcuna informazione.Abilitare la visualizzazione delle informazioni solo se l'utente è positivamente autorizzato.
  3. Idealmente, questo include gli URL (se digitano un URL valido ma non sono autorizzati, non far loro sapere che hanno raggiunto un URL valido).Un modo è reindirizzare (impostare l'intestazione della posizione come stavi facendo) alla pagina di accesso se non sono autorizzati.
  4. Crea uno script di gestione predefinito. Questo script centrale includerà tutti i file necessari e chiamerà tutte le funzioni necessarie.Passa tutte le informazioni sulla richiesta a questo gestore e chiedigli di generare tutto l'HTML.
  5. Requisito per n. 3: Incapsula il tuo codice in funzioni e classi.In questo modo, il tuo gestore predefinito può chiamarli quando è pronto, solo se ne hai bisogno e non semplicemente perché sono stati inclusi.Ciò ti consente un controllo molto maggiore sul flusso della tua app.
  6. Invece di echoinserendo HTML in punti casuali nel codice, restituisci tutto l'output HTML al tuo gestore principale, che lo raccoglierà e lo stamperà tutto in un unico posto quando sarà pronto.Casuale echoI messaggi sparsi in giro facilitano la comparsa di buchi di sicurezza.
  7. Non fidarti dell'input dell'utente.Se intendi utilizzare un valore da cui ottieni $_GET O $_POST, assicurati che sia un valore valido prima di utilizzarlo.

Modificare:

(Questo è più specifico e diretto al tuo codice così com'è adesso)

Ci sono 3 motivi per cui il tuo codice non funzionerà come previsto:

  1. Hai omesso una parentesi di chiusura nella prima riga if(!isset($_SESSION['page']).

  2. Il modo in cui è scritto il tuo codice, if $_SESSION['page'] è già impostato quando l'utente visita la pagina, verrà reindirizzato alla pagina di accesso.Puoi risolvere questo problema inserendo il file header('Location:login.php'); exit; nel if clausola e rimuovendo la else clausola completamente:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. È necessario impostare $_SESSION['page'] al primo accesso in modo che possano visualizzare la prima pagina.

Consiglierei di utilizzare un numero intero per $_SESSION['page'] invece del nome dello script.In questo modo puoi impostare $_SESSION['page'] a 1 quando accedono e ogni volta che visualizzano correttamente una pagina, incrementano $_SESSION['page'] per uno.Prendere in considerazione $_SESSION['page'] significare il prossimo articolo che l'utente potrà visualizzare.

È possibile impostare un $pageid su ogni carta.Ogni volta che provano a visualizzare una pagina, se $_SESSION['page'] è meno di $pageid, non consentire loro di visualizzare la pagina.

Altri suggerimenti

Il modo migliore è quello di costruire vera autenticazione e autorizzazione nella vostra applicazione. Poi l'URL che risponda alle esigenze di carta per verificare che l'utente è autorizzato a visualizzare la pagina prima di servirlo.

Qualunque cosa si sta facendo in check.php, farlo sulla pagina carta stessa.

Un sacco di alternative. Una coppia:

  • non codificano il nome dei nomi di carta nella URL, ma restituire il contenuto della carta selezionato da una pagina chiamata, ad esempio, test-paper.php.

  • traccia sui giornali che l'utente ha il diritto di vedere nella sessione dell'utente. Il check-in ogni pagina di carta di prova se l'utente è autorizzato a vedere questo uno e restituire un 403 Forbidden (o una pagina di errore) se non lo sono.

Molti di più, ne sono sicuro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top