risposta-alla-domanda-sullo-sviluppo-web-bd.com

Sicurezza CORS con app mobili

Dobbiamo mantenere la sicurezza del nostro server API con limitazione CORS:

Access-Control-Allow-Origin : http://myonlinesite.com

Ma abbiamo anche bisogno che questa API sia accessibile per le nostre app mobili (Android + iO).

Tutte le soluzioni che ho trovato mi dicono di consentire tutto Origin: *, ma questo sarebbe un grosso errore di sicurezza per la nostra API.

Stiamo costruendo le nostre app con Cordova, che WebView serve file locali e quindi invia: Origin: null, per tutte le sue richieste http (s). Quindi stiamo pensando di aggiungere null all'origine consentita. È meglio, poiché bloccherà ogni altro sito Web che tenta di recuperare la nostra API, ma consentirà a qualsiasi app mobile di recuperarla ...

C'è qualche soluzione più interessante per questo?

Grazie!

39

Quindi stiamo pensando di aggiungere null all'origine consentita. È meglio, poiché bloccherà ogni altro sito Web che tenta di recuperare la nostra API, ma consentirà a qualsiasi app mobile di recuperarla ...

Bene, se lo fai, allora stai permettendo le richieste dal codice JavaScript che viene eseguito da qualsiasi origine non-http/https — che include chiunque esegua qualcosa da un file:// o anche data: URL.

Pertanto, se si utilizza una politica CORS restrittiva per motivi di "sicurezza", inviare le risposte con un Access-Control-Allow-Origin: null header sembra una pessima idea.


Dobbiamo mantenere la sicurezza del nostro server API con la limitazione CORS: tutte le soluzioni che ho trovato mi dicono di consentire tutto Origin: *, ma questo sarebbe un grosso errore di sicurezza per la nostra API.

Non spieghi perché hai stabilito che sarebbe un errore di sicurezza o perché devi avere una politica CORS restrittiva. A meno che (1) il server Web non sia in esecuzione in una rete intranet o dietro un altro tipo di firewall e (2) l'accesso alle risorse non sia altrimenti limitato solo dall'autorizzazione IP, non si ottiene nulla dall'uso di una politica CORS restrittiva . Per citare le specifiche :

Configurazione di base del protocollo CORS sicuro

Per le risorse in cui i dati sono protetti tramite l'autenticazione IP o un firewall (purtroppo ancora relativamente comune), l'utilizzo del protocollo CORS non è sicuro. (Questo è il motivo per cui è stato inventato il protocollo CORS.)

Tuttavia, in caso contrario l'utilizzo dell'intestazione seguente è sicuro:

Access-Control-Allow-Origin: *

Anche se una risorsa espone informazioni aggiuntive basate su cookie o autenticazione HTTP, l'utilizzo dell'intestazione sopra non le rivelerà. Condividerà la risorsa con API come XMLHttpRequest, proprio come è già condivisa con curl e wget.

Quindi, in altre parole, se non è possibile accedere a una risorsa da un dispositivo casuale connesso al web usando curl e wget, l'intestazione sopra menzionata non deve essere inclusa. Se è possibile accedervi, tuttavia, è perfettamente bene farlo.

21
sideshowbarker

Come sottolineato nella risposta di sideshowbarker, usando Access-Control-Allow-Origin: null non può essere considerato sicuro se l'app può essere aperta nel contesto di un browser. Tuttavia, non presenta un rischio per la sicurezza di un'app in esecuzione nella propria vista Web dedicata.

La stessa politica di origine (estesa da CORS) è progettata per un tipo specifico di minaccia: uno script proveniente da un dominio straniero, in esecuzione nel browser, che invia una richiesta al server che include i cookie di autorizzazione. Ma se stai eseguendo la tua app in un WKWebView dedicato, non ci saranno script stranieri in grado di effettuare una richiesta al tuo server utilizzando i tuoi cookie.