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:
- L'utente accede al sito e crea una "cosa"
- Nella risposta di create.php, all'utente viene data una stringa generata casualmente. Questo non è memorizzato sul server, ma il suo hash è.
- La pagina "success" utilizza Javascript localStorage per memorizzare la stringa generata.
- 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.
- 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.