Come disabilitare la memorizzazione nella cache dei dati del modulo?

5

Una pagina Web accetta i dati di nome utente e password all'interno di una richiesta POST HTTP. Questa richiesta POST viene effettivamente visualizzata come una voce nella cronologia dei browser. Dopo il logout utente dall'applicazione e 'navigare' verso questa voce usando il pulsante indietro, il browser nota che il contenuto è già scaduto, quindi richiede informazioni sul contenuto scaduto e chiede di inviare nuovamente la richiesta per ottenere la versione 'aggiornata' di quella pagina dal server.

Una volta che l'utente fa clic sul pulsante Riprova / Aggiorna, i dati dei moduli vengono passati al server e trattati come una normale richiesta di accesso. Permette all'utente di accedere all'applicazione utilizzando le credenziali memorizzate nella cache dell'utente precedentemente disconnesso. Quali sono i modi possibili per impedire la memorizzazione nella cache dei dati di richiesta di input?

    
posta wxyz 08.10.2012 - 14:34
fonte

1 risposta

4

Questo non dovrebbe mai accadere.
Senza esempi di codice che posso guardare, una ragione per cui posso immaginare che ciò accada è un flusso di lavoro di autenticazione come mostrato di seguito:

Nel seguente diagramma, /login POST a /member , dove avviene il controllo dell'autenticazione.

Se l'autenticazione passa, le pagine continuano a inviare il contenuto dell'utente connesso. Ciò rende questa pagina ( /member ) visualizzata nella cronologia dei browser. Ogni volta che fai clic sul pulsante Indietro / Avanti sul tuo browser per accedere a questa pagina, ti verrà chiesto se desideri POSTARE il contenuto del modulo in questa pagina. In questo caso, la data è credenziali di accesso.


  WRONG WAY:

  +---------------------------+          +------------------------------+
  |   Login Page (/login)     |          |   Member Page(/member)       |
  |---------------------------|          |------------------------------|
  |          +--------------+ |          | if creds wrong               |
  | UserName |              | |          |   redirect_to /login         |
  |          +--------------+ |+-------->| else                         |
  |          +--------------+ |          |   "Welcome Back,             |
  | Password |              | |          |    Here is your super secret |
  |          +--------------+ |          |    member area where you can |
  |                           |          |    check out the cool stuff" |
  +---------------------------+          | end                          |
                                         +------------------------------+

Invece dovresti avere questo tipo di flusso di autenticazione:

  • I post della pagina di accesso a una pagina di /verify (o / auth come lo chiami tu).
  • La pagina di verifica non ha alcun output http. A seconda che i crediti siano buoni o cattivi, è sufficiente reindirizzare alla pagina appropriata. Se l'accesso è valido, imposta una bandiera cookie che indica una sessione valida.
  • La pagina membro convalida la sessione controllando il valore del cookie e reindirizza alla pagina /login se la sessione è scaduta / non impostata.

In questo flusso di lavoro, la pagina /verify non viene mai visualizzata nella cronologia del browser e non è possibile che l'utente possa "fare clic su Aggiorna" su quella pagina per far sì che i dati POST vengano nuovamente inviati.

   CORRECT WAY                POST        +-----------------------------+
                            +------------>| Verify page (/verify)       |
                            |             |-----------------------------|
  +-------------------------+-+           | if creds wrong              |
  |   Login Page (/login)     |<---+---------+redirect_to /login        |
  |---------------------------|    |      | else                        |
  |          +--------------+ |    |      |   set_session_cookie        |
  | UserName |              | |    | +-------+redirect_to /member       |
  |          +--------------+ |    | |    | end                         |
  |          +--------------+ |    | |    |                             |
  | Password |              | |    | |    +-----------------------------+
  |          +--------------+ |    | |
  |                           |    | |      +------------------------------+
  +---------------------------+    | +----->|   Member Page(/member)       |
                                   |        |------------------------------|
                                   |        | if session_cookie not set    |
                                   +-----------+redirect_to /login         |
                                            | else                         |
                                            |   "Welcome Back,             |
                                            |    Here is your super secret |
                                            |    member area where you can |
                                            |    check out the cool stuff" |
                                            | end                          |
                                            +------------------------------+

Questo è il modello comune di Post / Redirect / Get. Puoi controllare questa pagina wiki per immagini più belle: link

Inoltre, se vuoi impedire al browser di memorizzare alcune pagine HTML, puoi impostare l'intestazione HTTP di controllo della cache su "no-cache" per quelle pagine.

Cache-Control: no-cache

    
risposta data 09.10.2012 - 00:08
fonte

Leggi altre domande sui tag