Ho chiesto qualcosa di simile sullo stackoverflow con un particolare pezzo di codice, tuttavia voglio provare a chiedere questo in un senso più ampio.
Quindi ho questa applicazione web che ho iniziato a scrivere in backbone usando una Single Page Architecture (SPA), tuttavia sto iniziando a indovinarla per sicurezza. Ora non stiamo archiviando e inviando informazioni sulla carta di credito o cose simili attraverso questa applicazione web, ma stiamo memorizzando informazioni sensibili che le persone ci stanno caricando e che potremo riscaricare anche.
L'evidente preoccupazione per la sicurezza che ho con JavaScript è che non ti puoi fidare di nulla che provenga da JavaScript, tuttavia in un'applicazione Backbone SPA, tutto viene inviato tramite JavaScript. Ci sono due funzionalità di sicurezza che dovrò creare in JavaScript; permessi e autenticazione.
Il pezzo di autenticazione non è altro che un override del metodo Backbone.Router.prototype.navigate per controllare il frammento che sta tentando di caricare e se il JavaScript application.session.loggedIn non è impostato su true (e non visualizzano nessuno pagina autenticata), vengono reindirizzati automaticamente alla pagina di accesso. L'utente può facilmente modificare application.session.loggedIn in modo che corrisponda a true (o modificare il metodo Backbone.Router.prototype.navigate), ma in tal caso non dovrebbero anche incorporare in modo così semplice un link nella pagina (o modificarne uno corrente) che ha le classi, gli attributi data- * e i valori href corretti per caricare una pagina che deve essere caricata solo quando l'utente ha effettuato l'accesso (e dispone delle autorizzazioni).
Quindi ho un oggetto acl che si occupa delle cose dei permessi. Tutto ciò che qualcuno dovrebbe fare per visualizzare pagine o parti di pagine che non dovrebbero essere in grado di chiamare acl.addPermission (risorsa, permesso) con le autorizzazioni appropriate o modificare acl.hasPermission () per restituire sempre true e quindi navigare lontano e poi di nuovo alla pagina.
Ora alcune cose sono come EMCAScript 5 come Object.seal () o Object.freeze () aiuterebbe con alcune di queste funzionalità, ma dobbiamo supportare IE 8 che non supporta tali funzionalità.
Ora l'API REST esegue anche controlli di sicurezza su ogni richiesta, quindi tecnicamente anche se sono in grado di vedere parti dell'interfaccia a cui non dovrebbero essere in grado, non dovrebbero comunque essere in grado di influenzare alcun dato.
I principali vantaggi per me nello sviluppo di un'applicazione JavaScript SPA è che l'applicazione è molto più reattiva poiché trasferisce solo la quantità minima di dati JSON per l'azione richiesta e esegue anche la quantità minima di lavoro. Ci sono anche altre cose che penso siano utili come se dovessi sviluppare un'API per i dati (che è buona se vuoi espandere la tua applicazione su piattaforme / tecnologie diverse) o la loro è più una separazione tra front-end e back-end, tuttavia, se la sicurezza è un problema, è davvero consigliabile percorrere la strada di un'applicazione JavaScript SPA per il front-end?