Prima di tutto voglio scusarmi per l'ortografia e la grammatica sbagliate. L'inglese non è la mia lingua madre.
Ho costruito una comunicazione JSON tra un front-end (sito Web) e il mio server web Node.js. Voglio ricordare che potrei estendere il mio front-end alle app mobili in modo da consentire Access-Control-Allow-Origin: *. Ora proteggere l'API sul mio server web Node.js è un grosso problema. Sono nuovo sul tema della sicurezza e voglio mostrarti una bozza di come voglio sviluppare la mia sicurezza prima di porre le mie domande:
Procedura generale: sto convalidando tutti i dati di input sul lato client - questo include non solo il controllo se ad es. l'e-mail fornita è di un formato corretto, ma sfugge anche possibili input XSS con htmlspecialchars()
. Faccio un Ajax POST HTTP con i miei dati convalidati e il token di accesso (nell'intestazione HTTP) al back-end. Nel back-end scarto richieste che non corrispondono a nessun record DB con userid (in oggetto di sessione) + token di accesso nel mio tokenDB. Finalmente. Sto anche convalidando i dati sul back-end.
Come faccio la mia registrazione e accesso:
-
Modulo di registrazione con campi di testo nascosti con CSS e verifica tramite email.
- campi nascosti per impedire spambots
- verifica dell'e-mail per rendere la vita più difficile per gli spammer manuali
-
Accesso: email e password vengono inviate direttamente al server e se un record utente viene trovato nel userDB
- l'accesso ha esito positivo
- userid + token di accesso generato in modo casuale + date > è inserito nel tokenDB
- userid viene salvato in una sessione e un token di accesso viene restituito nell'intestazione HTTP 'accessToken'
Spero che questa bozza veloce ti fornisca informazioni sufficienti per un feedback qualificato.
Le mie domande:
- La convalida sto facendo abbastanza? Quali possibilità di XSS / altre minacce non sono state eliminate?
- La conversione di
htmlspecialchars()
è sufficiente per impedire XSS? - Ho capito correttamente il concetto del token di accesso?
- Come posso creare un token di accesso?
- È sufficiente memorizzare l'ID utente nella sessione?
- È necessario HTTPS? - > Non voglio pagare i certificati
- Qual è la tua impressione generale sulla mia bozza di sicurezza?
Spero che tu abbia compreso la mia spiegazione del concetto di protezione della mia API. Spero davvero di ricevere un feedback professionale!
Grazie, MZ