Impedire agli utenti Web di utilizzare la loro barra di posizione all'interno di un'app

1

Il mio capo mi ha chiesto di modificare la nostra app Web Java in modo che gli utenti non possano accedere a luoghi nella nostra app Web digitando gli URL nella barra dei percorsi del browser.

Le ho detto che non posso disabilitare le barre di posizione.

Le ho detto che il modo in cui solitamente viene fatto è avviare una WebApp in una nuova finestra del browser personalizzata senza inserire una barra della posizione.

Questo non era accettabile per lei.

Ho già una classe filtro Java impostata per applicare varie regole. Quindi, stavo pensando a questo approccio

  1. Implementa una funzione javascript system write "WriteFlagCookie" per scrivere un cookie ogni volta che un utente avvia un GET facendo clic su un link o un pulsante.

  2. Ovunque la WebApp esegua un reindirizzamento o un forward, metta una variabile flag, dica "wasRedirected" nella sessione HTTP.

  3. Nel mio filtro, intercetti ogni richiesta e controlla il tipo di richiesta.

  4. Se si tratta di un POST, so che un essere umano non ha inserito l'URL nel browser, quindi l'ho lasciato passare automaticamente.

  5. Se è un GET, cerca un cookie generato da javascript o il flag memorizzato nella sessione per indicare un reindirizzamento o un inoltro. Se non trovo nessuno dei due, rimanda l'utente alla pagina da cui ha appena cercato di uscire.

Anche se sarà molto lavoro, sembra troppo semplice per essere adeguato.

C'è comunque un modo per mordermi in culo?

Il mio capo vuole risolvere due problemi

  1. Gli utenti eseguono schermate fuori sequenza e ricevono messaggi di errore. Ciò include i moduli multischermo (che dobbiamo conservare) e gli utenti che utilizzano un pulsante Indietro.

  2. Impedire all'utente di lasciare determinate pagine e andare in altre parti dell'applicazione fino a quando non compila ciò che vogliamo che compili su quegli schermi.

Ho idee su come risolvere # 1 & # 2, anche laborioso, ma al mio capo piace l'idea di disabilitare gli URL di digitazione per la navigazione per una soluzione completa.

Forse una volta che vede quanto lavoro è coinvolto nella disattivazione della navigazione digitata, posso commercializzarla solo per risolvere quei problemi.

Grazie

Steve

    
posta Steve 08.05.2013 - 22:38
fonte

2 risposte

4

Oltre alla "progettazione di una pagina", l'altro modo comune con cui viene realizzato è tramite un identificatore di sessione (che in genere impedisce agli utenti di salvare un segnalibro e di ritornare ad esso; la navigazione a schede può essere prevenuta o meno sull'implementazione del browser), accoppiato con un "token di richiesta". Tutti i collegamenti in ogni pagina serviti al browser che reindirizzano all'interno dell'applicazione hanno una stringa di query con un GUID (o il GUID memorizzato in ViewState per renderlo completamente inaccessibile), che è stato generato dal server durante il rendering della pagina.

Il server memorizza questo GUID e l'ultima pagina servita nell'archivio di sessione e se una richiesta proviene da quella sessione che non ha un token di richiesta o non ha quello giusto (indicando che l'utente sta usando il suo back / pulsanti di avanzamento), l'utente viene indirizzato a una semplice pagina che gli dice gentilmente di non farlo, con un collegamento all'ultima pagina che il server ha servito attivamente. Pertanto, per saltare con successo intorno usando la barra di posizione, l'utente deve essere più intelligente dell'orso medio e includere il token nella sua richiesta digitata a mano.

Questo è un po 'più semplice da implementare in un'architettura multi-pagina esistente rispetto al passaggio a una pagina (IMO una riprogettazione piuttosto seria) e segue la regola 80/20 di mantenere la stragrande maggioranza dei tuoi utenti onesti con il minimo sforzo ; l'altro 20% avrà bisogno di un'anti-manomissione più avanzata, possibilmente ricordando i collegamenti disponibili della pagina corrente e eseguendo lo stesso reindirizzamento se stanno andando da qualche parte con cui non avrebbero potuto ottenere un collegamento, con o senza il GUID corretto.

    
risposta data 08.05.2013 - 23:44
fonte
2

Penso che potresti parlare di design a pagina singola, in cui l'HTML viene caricato dal server per l'URL home, ma tutta la navigazione viene eseguita tramite richieste AJAX. Ciò impedisce la modifica della cronologia del browser e l'utente non ha altri URL che possono navigare anche.

One Page Design

MSDN One Page Design

    
risposta data 08.05.2013 - 22:50
fonte

Leggi altre domande sui tag