La mia interfaccia utente deve essere protetta se la mia API è?

10

Sto lavorando a un progetto che sta creando due nuovi moduli Web separati (forse anche su server diversi) per supportare una nuova applicazione Web, con una che serve un'interfaccia utente basata su JS statico e l'altro progetto che fornisce un'API . L'API sarà protetta per ruolo, il che significa che devi essere loggato e avere i ruoli giusti per poter accedere agli endpoint, tuttavia mi chiedevo se c'è molto merito nel proteggere l'interfaccia utente?

Non sto parlando di SSL, come spero saremo in grado di applicarlo su entrambi i progetti, ma di più se è giusto scaricare semplicemente un singolo file JS sulla macchina di un utente (una volta che hanno effettuato l'accesso con qualsiasi ruolo), indipendentemente dai ruoli che hanno, e fare affidamento sull'API per proteggere i dati?

Ho la sensazione che mi manchi qualcosa di fondamentale qui, ma per quanto posso vedere, l'unico vero rischio è in termini di logica applicativa nell'interfaccia utente essere visibile a tutti i clienti, anche se ovviamente sarebbe limitato - e quindi offuscato.

Chiedo scusa per la domanda un po 'vaga ... temo che non si tratti di un'area in cui ho molta esperienza.

    
posta Martin 10.02.2014 - 18:02
fonte

4 risposte

7

Se la tua API è solida, la vera vulnerabilità si riferisce al fatto se puoi essere certo che l'utente è chi dicono di essere.

Un vettore di attacco è chiamato falsificazione di richieste tra siti ("CSRF" o "XSRF"). In pratica, qualcuno che impersona un altro utente e fa richieste al tuo server.

Quando stabilisci una sessione (che contiene i ruoli per un determinato utente), devi assicurarti che nessun altro possa dirottare quella sessione. In genere ciò avviene impostando un cookie univoco sulla macchina dell'utente che è " link " (ovvero, un cookie che il cliente -side JS non dovrebbe essere in grado di manipolare), quindi assicurarsi che quel cookie sia lo stesso nelle richieste successive.

Ecco un modulo Node destinato a rafforzare il server Web con la protezione CSRF, tra le altre misure di sicurezza, che potrebbe essere utile osservare: collegamento

Re: l'API in particolare, ecco una rottura di qualcuno che ha hackerato GitHub .

Probabilmente va oltre le tue esigenze di sicurezza, ma tieni presente che qualsiasi nefasta estensione di Chrome con le giuste autorizzazioni può alterare il lato client in modo tale da infrangere il tuo modello di sicurezza (inviando dati fuori sede o modificando il Interfaccia utente, ad esempio).

    
risposta data 11.02.2014 - 01:27
fonte
13

Penso che tu sia sulla strada giusta. Finché l'API è sicura e non consentirà un comportamento scorretto, non è possibile manipolare l'interfaccia utente per causare comportamenti errati direttamente, almeno per quanto riguarda l'applicazione.

I problemi iniziano quando ti rendi conto che dal punto di vista dell'utente non è possibile fidarsi dell'interfaccia utente. Se è possibile manipolare ciò che l'utente vede, allora potrebbe essere possibile indurli a inserire informazioni errate ingannando il loro input. Allo stesso modo, la perdita di informazioni dall'interfaccia utente può o non può essere un problema nel tuo contesto.

Non dovrai preoccuparti degli exploit in blocco che infrangono le regole di business, dal momento che l'API non lo consente, ma hai ancora problemi di sicurezza per l'esperienza dell'utente finale.

    
risposta data 10.02.2014 - 18:23
fonte
1

In teoria è sufficiente che solo l'API sia sicura, come nel caso delle tipiche applicazioni client-server in cui l'utente utilizza un client di sua scelta ed è il problema dell'utente se il client è sfruttato.

Tuttavia, nel caso di un sito Web, dal momento che stai fornendo il client (l'interfaccia web), spetta a te assicurarti che non possa essere sfruttato da terze parti una volta che l'utente ha effettuato l'accesso utilizzando tecniche come XSS e CSRF.

    
risposta data 11.02.2014 - 06:23
fonte
0

Sfortunatamente, non è possibile limitare le informazioni da un utente in modo efficace una volta arrivato al computer client. In altre parole, se comprendo correttamente che stai inviando un file JS con codice o informazioni che non vuoi che l'utente sia in grado di leggere a meno che non abbia ruoli specifici, allora non sarai in grado di raggiungere quell'obiettivo . Sarà necessario filtrare le informazioni sul lato server prima di inviarle al client. Questa operazione può richiedere molto tempo per controllare sempre i ruoli utente prima di inviare i dati. Ciò richiede più chiamate al server poiché l'utente esegue determinate attività che richiedono informazioni. Ma tali azioni sono necessarie per garantire che le informazioni siano accessibili solo agli utenti corretti.

Il js minimizzato non fornisce molto offuscamento una volta che è stato inviato all'utente.

    
risposta data 10.02.2014 - 18:11
fonte

Leggi altre domande sui tag