Nginx

Come usare CORS con Nginx

Come usare CORS con Nginx

Cos'è CORS

CORS, noto anche come condivisione di risorse di origine incrociata, è una tecnica utilizzata nei moderni browser Web che controlla l'accesso alle risorse ospitate in un server Web. CORS utilizza intestazioni aggiuntive come origin, access-control-origin e molti altri per determinare se la risorsa richiesta ha l'autorizzazione per essere inviata al browser. Lo scopo principale di CORS è impedire a un'applicazione Web in esecuzione in un browser Web di accedere alle risorse ospitate in un'origine diversa quando non è disponibile l'autorizzazione, il che significa che l'applicazione Web non può scaricare risorse, come immagini, script, css come qualsiasi contenuto ecc. quando non sono ospitati nella stessa origine (di solito dovrebbero essere tutti nello stesso dominio) dell'applicazione web a meno che il server non sia configurato per consentire questo comportamento. Avendo questa implementazione in un browser Web, gli utenti possono proteggere i propri dati da parti non autorizzate. Un hacker può modificare segretamente una pagina Web mentre è al centro della connessione per interrompere l'attività dell'utente o ottenere l'accesso a dati preziosi. Tuttavia, ci sono anche vantaggi di CORS, ad esempio consente agli sviluppatori di caricare risorse da un'origine diversa a causa dell'efficacia dei costi o semplicemente della convenienza. In tal caso devono modificare il proprio server web per consentire tali richieste. Questo articolo mostra come farlo su un server web Nginx con facilità.

Cosa fa scattare una richiesta CORS

Non tutte le richieste attivano una richiesta CORS poiché di solito le risorse sono ospitate nella stessa origine dell'applicazione web. Se è diverso, viene attivato CORS. CORS ha due tipi di richieste, richiesta semplice e richiesta pre-flight CORS.

Simple Request funziona come una richiesta normale, il browser Web invia una richiesta al server per scaricare una particolare risorsa quando l'utente l'ha avviata, quindi il server Web controlla l'origine della richiesta, la confronta con le regole del server Web, se è abbinato, la risorsa è fornita. Questo tipo di richiesta utilizza le intestazioni OIRIGN e ACCESS-CONTROL-ALLOW-ORIGIN per determinare se la risorsa deve essere fornita o meno. La richiesta semplice viene attivata solo se vengono utilizzati metodi di richiesta come GET, HEAD, POST e vengono utilizzate intestazioni come Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width. Anche allora, non tutti i tipi di contenuto attivano una semplice richiesta. Qui solo i tipi di codifica dei moduli attivano una semplice richiesta.

Il tipo di richiesta pre-flight è piuttosto diverso in quanto non c'è accesso diretto alle risorse nel primo turno. Quando le suddette condizioni vengono alterate in qualche modo, utilizzando un'intestazione di richiesta diversa o un diverso tipo di contenuto, viene attivata una richiesta pre-flight. Nelle richieste pre-flight, il browser Web prima si assicura di poter accedere alla risorsa comunicando con il browser Web, quindi quando il browser Web ha risposto con la risposta OK (HTTP 200), quindi invia un'altra richiesta per scaricare la risorsa. Utilizza il metodo di richiesta HTTP OPTION per avviare la prima richiesta, quindi utilizza GET, POST come i tipi di richiesta per scaricare le risorse.

Come configurare Nginx per supportare le richieste CORS

Questa sezione mostra come configurare un server web nginx per consentire la condivisione di risorse di origine incrociata. Questo può essere fatto solo se lo sviluppatore ha accesso al server web, poiché comporta la modifica del file di configurazione di Nginx.

Usa il seguente semplice frammento di codice per consentire le richieste CORS. Questo deve essere copiato nel file predefinito del servizio nginx in Ubuntu o qualsiasi altra piattaforma.

Posizione \
if ($request_method = 'OPZIONI')
add_header 'Access-Control-Allow-Origin' 'https://localhost;
add_header 'Access-Control-Allow-Methods"POST, OPTIONS';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type"text/plain; charset=utf-8';
ritorno 204;

if ($request_method = 'POST')
add_header 'Access-Control-Allow-Origin"https://localhost;
add_header 'Access-Control-Allow-Methods' 'POST';

Il frammento di codice di base va come sopra. Contiene direttive come request_method, add_header per identificare il tipo di richiesta e impostare l'intestazione della risposta che il browser deve leggere rispettivamente. L'intestazione Access-control-allow-origin definisce a quale origine ha accesso la risorsa, ad esempio se un'applicazione web ospitata in github vuole accedere a un'immagine ospitata in myOwnServer.com, allora l'URL di github dovrebbe essere usato come valore della direttiva Access-control-allow-origin in myOwnServer.com, quindi ogni volta che l'applicazione web ospitata in github invia richieste a myOwnServer.com per scaricare il file immagine, a tutte queste richieste viene concessa l'autorizzazione. L'intestazione Access-control-allow-method definisce quali tipi di richiesta supporta l'applicazione Web che invia le richieste, quindi il resto delle intestazioni è per la sua età massima per memorizzare nella cache le richieste e il tipo di contenuto supportato.

Come descritto sopra, una volta completata la richiesta OPTION, il browser invia un'altra richiesta per scaricare le risorse se la prima richiesta è andata a buon fine, le sue intestazioni sono impostate nel primo request_method se tra parentesi.

Oltre alle suddette direttive, ci sono alcune altre importanti direttive in Nginx che possono essere utilizzate nelle richieste CORS. Una delle direttive più importanti è access-control-allow-headers, ciò che fa è impostare l'intestazione della risposta con i nomi di intestazione consentiti per la verifica del browser. Un'applicazione web può avere le proprie intestazioni per vari scopi, e se tali intestazioni sono presenti nelle richieste successive dopo la richiesta OPTIONS iniziale, allora tutte queste intestazioni dovrebbero essere consentite dal server web prima che la risorsa richiesta sia condivisa.

È importante che questo frammento di codice sia nel posto giusto nel file predefinito di Nginx, perché Nginx esegue diversi blocchi di posizione a seconda dell'URL corrispondente, se tale blocco di posizione non contiene questo frammento di codice, allora non viene eseguito affatto, e quindi è importante usarlo in tutti i blocchi di posizione per sicurezza. Alcuni dei blocchi di posizione importanti sono Images, PHP (~ \.php$), CSS, ecc… blocchi.

Una volta salvato il suddetto frammento di codice, salvare il file Nginx e ricaricare il servizio Nginx per rendere effettive le modifiche.

Conclusione

CORS, è noto come condivisione di risorse tra origini ed è una tecnica per controllare l'accesso delle risorse. Queste risorse possono essere qualsiasi file dall'immagine a un file javascript. Lo scopo principale di CORS è rafforzare la sicurezza delle applicazioni web per prevenire attacchi man in the middle. Tuttavia, anche CORS può avere dei vantaggi. In tal caso, il CORS deve essere attivato poiché non è consentito per impostazione predefinita. Il tipo di richiesta CORS di base è un tipo di richiesta semplice, utilizza solo le direttive ORIGIN e ACCESS-CONTROL-ALLOW-ORIGIN e con questo aiuto Nginx può concedere l'autorizzazione al browser Web per accedere alla risorsa richiesta a seconda dell'origine. Ad ogni modo CORS è abbastanza utile e dovrebbe essere usato con attenzione.

Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...
Giochi rimasterizzati in HD per Linux che non hanno mai avuto una versione Linux prima
Molti sviluppatori ed editori di giochi stanno realizzando remaster HD di vecchi giochi per prolungare la vita del franchise, per favore i fan richied...
Come utilizzare AutoKey per automatizzare i giochi Linux
AutoKey è un'utilità di automazione desktop per Linux e X11, programmata in Python 3, GTK e Qt. Utilizzando la sua funzionalità di scripting e MACRO, ...