ID di proprietà insolito utilizzando localStorage; eventuali problemi?

2

Sto lavorando su un piccolo progetto parallelo in PHP. Potrei ancora includere una sorta di effettiva registrazione di nome utente / password lungo la linea, ma per ora, per facilità di attirare l'attenzione, il mio obiettivo è quello di consentire a qualsiasi utente anonimo di utilizzare il mio sito senza la registrazione. Ecco come funziona, in generale:

  1. L'utente accede al sito e crea una "cosa"
  2. Nella risposta di create.php, all'utente viene data una stringa generata casualmente. Questo non è memorizzato sul server, ma il suo hash è.
  3. La pagina "success" utilizza Javascript localStorage per memorizzare la stringa generata.
  4. In futuro, se l'utente desidera apportare piccole modifiche alla sua "cosa", compila un modulo su una pagina. Quindi, la richiesta viene inviata con questa stringa localStorage. Sul lato server, viene convalidato contro l'hash prima di aggiornare la cosa.
  5. Un giorno, quando implementerò nomi utente / password, gli utenti potranno visitare una pagina per acquisire la proprietà dei loro articoli acquisendo tutti i loro valori di LocalStorage.

Alcune cose a cui pensare:

Ho letto le vulnerabilità XSS utilizzate per rubare ID di sessione di cookie e informazioni simili. Il tratto comune di molti di essi sembra essere che il cattivo sia in grado di eseguire Javascript sul dominio di destinazione, il che mi sembra un grosso presupposto. Inutile dire che non uso eval() , e cerco anche di evitare innerHtml quando possibile. Sono particolarmente consapevole delle volte in cui le stringhe generate dall'utente vengono utilizzate. Penso di essere aiutato dal fatto che il mio sito non è particolarmente complesso o personalizzabile dall'utente.

Conosco l'intestazione HttpOnly, ma mi piace Javascript e desidero che molte azioni del mio sito siano asincrone (in modo che tu possa salvare le informazioni di un modulo senza caricare una nuova pagina)

Inoltre, dovrei notare che le informazioni salvate sul mio sito sono meglio etichettate come intrattenimento e, nel loro corretto intento, non dovrebbero contenere informazioni sensibili, nemmeno come indirizzi di posta elettronica (quelli verrebbero quando implemento nomi utente / password) quindi penso di stare bene con qualcuno che è in grado di penetrare da un accesso fisico (cioè rubare il portatile di un utente); In pratica sto cercando di trovare il giusto equilibrio tra sicurezza e praticità.

Inoltre ora sto considerando che, a seconda di quanto sia costoso ottenere un certificato, HTTPS sarebbe abbastanza importante da includere. Immagino che sarei semplicemente sorpreso da qualcuno che guarda pacchetti HTTP solo per prendere possesso della "cosa" di qualcun altro.

    
posta Katana314 19.08.2013 - 21:56
fonte

1 risposta

2

Mi sembra un approccio ragionevolmente sicuro al posto di avere account utente e gestione delle sessioni. HTTPS è un must, ma guarderei anche i seguenti punti per risolvere i tuoi problemi specifici.

In the response of create.php, user is given a randomly-generated string. This is not stored on the server, but its hash is.

Assicurati che la stringa generata sia generata usando un meccanismo crittograficamente sicuro. per esempio. openssl_random_pseudo_bytes

Se vuoi aggiungere ulteriore sicurezza puoi aggiungere un sale , o meglio ancora usare bcrypt per il valore memorizzato dal server.

I know of the HttpOnly header, but I like Javascript, and I want a lot of my site's actions to be asynchronous (so you can save a form's information without loading a new page)

Potresti usare un cookie con HttpOnly set - il cookie verrà comunque inviato con le tue richieste AJAX, sarà solo il JavaScript stesso che non sarà in grado di accedervi. Imposta anche la bandiera sicura e usala in combinazione con HTTPS per assicurarti che il tuo cookie sia trasmesso solo tramite una connessione sicura .

The common trait with a lot of them it seems is that the bad guy is able to run Javascript on the target domain, which seems like a big assumption to me.

Questa è in effetti la definizione di XSS in quanto un utente malintenzionato può eseguire JavaScript sul dominio di destinazione. Assicurati di seguire il consiglio nel XS (Cross Site Scripting) Cheat Sheet

    
risposta data 21.08.2013 - 13:31
fonte

Leggi altre domande sui tag