Problemi e soluzioni della condivisione delle risorse tra origini (CORS)

  • Home
  • Generale
  • Problemi e soluzioni della condivisione delle risorse tra origini (CORS)
Problemi e soluzioni di Cross-Origin Resource Sharing (CORS) 10615 Questo articolo del blog si concentra sui problemi di Cross-Origin Resource Sharing (CORS) riscontrati frequentemente dagli sviluppatori web. Inizia spiegando cos'è CORS, i suoi principi di base e perché è importante. Fornisce poi un'analisi dettagliata di come si verificano gli errori CORS e dei metodi disponibili per risolverli. Evidenzia inoltre le best practice e le considerazioni chiave per un'implementazione CORS sicura ed efficace. Questa guida ha lo scopo di aiutarti a comprendere e risolvere i problemi relativi a CORS nelle tue applicazioni web.

Questo post del blog si concentra sui problemi di Cross-Origin Resource Sharing (CORS) che gli sviluppatori web incontrano frequentemente. Inizia spiegando cos'è il CORS, i suoi principi fondamentali e perché è importante. Esamina quindi in dettaglio come si verificano gli errori CORS e i metodi che possono essere utilizzati per risolverli. Inoltre, vengono evidenziate le migliori pratiche e le considerazioni chiave per un'implementazione CORS sicura ed efficace. Questa guida ha lo scopo di aiutarti a comprendere e risolvere i problemi relativi al CORS nelle tue applicazioni web.

Cos'è CORS? Informazioni di base e importanza

Condivisione delle risorse tra origini diverse (CORS), CORS è un meccanismo di sicurezza che consente ai browser web di accedere a risorse provenienti da un dominio diverso dal proprio. In sostanza, regola l'accesso di un'applicazione web a risorse esterne al proprio dominio (ad esempio, API, font, immagini). I browser, per impostazione predefinita, bloccano le richieste provenienti da un dominio verso un altro a causa della Same-Origin Policy (SOM). CORS offre un modo per aggirare in modo sicuro questa restrizione.

L'importanza di CORS deriva dalla complessità delle moderne applicazioni web e dalla necessità di recuperare dati da diverse fonti. Molte applicazioni web si basano su API, CDN o altre fonti esterne ospitate su server diversi. Senza CORS, l'accesso a queste risorse sarebbe impossibile, limitando gravemente la funzionalità delle applicazioni web. CORS, Ciò offre agli sviluppatori la flessibilità di estrarre dati da diverse fonti, mantenendo al contempo la sicurezza delle applicazioni web.

Nella tabella sottostante, CORS‘Di seguito vengono riassunti i concetti fondamentali e il funzionamento dell'[organizzazione/istituzione]:

Concetto Spiegazione Importanza
Politica della stessa origine I browser impediscono agli script caricati da una fonte di accedere a risorse provenienti da una fonte diversa. Garantisce la sicurezza e impedisce agli script dannosi di accedere ai dati sensibili.
Richiesta cross-origin Una richiesta HTTP dal dominio di una pagina web a un altro. Consente alle moderne applicazioni web di accedere a diverse API e risorse.
CORS Titoli (CORS Intestazioni) Intestazioni personalizzate che il server aggiunge alle intestazioni di risposta per consentire le richieste cross-origin. Indica al browser quali domini possono accedere alle risorse.
Richiesta pre-volo Una richiesta che il browser invia al server utilizzando il metodo OPTIONS prima di effettuare richieste cross-origin complesse. Ciò consente al server di verificare se accettare la richiesta.

CORS‘Il funzionamento di base di HTTPS si basa sulla comunicazione da parte del server web al browser delle risorse a cui consente l'accesso tramite le intestazioni di risposta HTTP. Il server specifica quali domini possono accedere alle sue risorse utilizzando l'intestazione Access-Control-Allow-Origin. Se il dominio richiedente è incluso in questa intestazione, oppure se viene specificato * (tutti), il browser accetta la richiesta. In caso contrario, il browser blocca la richiesta e invia una notifica. CORS Si è verificato un errore.

    Elementi chiave di CORS

  • Controllo accessi-Consenti origine: Specifica quali domini possono accedere alla risorsa.
  • Metodi di controllo degli accessi consentiti: Specifica quali metodi HTTP (GET, POST, PUT, DELETE, ecc.) possono essere utilizzati.
  • Intestazioni Access-Control-Allow: Specifica le intestazioni personalizzate che possono essere incluse come opzione.
  • Controllo accessi-Consenti credenziali: Specifica se è possibile includere informazioni personali (cookie, intestazioni di autorizzazione).
  • Controllo accessi - Età massima: Specifica per quanto tempo i risultati di una richiesta preliminare possono essere memorizzati nella cache.

CORS Gli errori spesso derivano da una configurazione errata lato server. È fondamentale che gli sviluppatori configurino correttamente i propri server, consentendo l'accesso alle risorse solo ai domini attendibili. Inoltre, CORS Seguire le migliori pratiche in questo ambito contribuisce a ridurre al minimo le vulnerabilità di sicurezza.

CORS, Il recupero dei dati è parte integrante delle moderne applicazioni web, offrendo la flessibilità necessaria per estrarre dati da diverse fonti mantenendo al contempo la sicurezza. Se configurato correttamente, migliora la funzionalità delle applicazioni web e l'esperienza utente.

Come funziona la condivisione di risorse tra paesi di origine diversa

Risorsa di origine incrociata CORS (Cognitive Resource Sharing) è un meccanismo che consente ai browser web di permettere alle pagine web provenienti da una determinata origine di accedere alle risorse di un'altra. In genere, i browser applicano la politica della stessa origine, il che significa che una pagina web può accedere alle risorse solo da un'origine che condivide lo stesso protocollo, host e porta. CORS è stato sviluppato per superare questa limitazione e consentire la condivisione sicura dei dati tra diverse origini.

L'obiettivo principale di CORS (Common Source Reliability) è proteggere le applicazioni web. Il principio della stessa fonte impedisce ai siti web dannosi di accedere ai dati sensibili degli utenti. Tuttavia, in alcuni casi, la condivisione dei dati tra fonti diverse è necessaria. Ad esempio, un'applicazione web potrebbe dover accedere a un'API su un server diverso. CORS offre una soluzione sicura per tali scenari.

Zona Spiegazione Esempio
Origine L'indirizzo della fonte che ha avviato la richiesta. http://example.com
Controllo accessi-Consenti origine Specifica a quali risorse il server consente l'accesso. http://example.com, *
Metodo di richiesta di controllo degli accessi Specifica quale metodo HTTP il client desidera utilizzare. POST, OTTIENI
Metodi di controllo degli accessi consentiti Specifica quali metodi HTTP sono consentiti dal server. POST, GET, OPZIONI

CORS funziona tramite una serie di intestazioni HTTP tra il client (browser) e il server. Quando il client effettua una richiesta cross-resource, il browser aggiunge automaticamente l'intestazione Origin alla richiesta. Il server controlla questa intestazione per decidere se consentire la richiesta. Se il server la consente, risponde con l'intestazione Access-Control-Allow-Origin. Questa intestazione specifica quali risorse possono accedere alla richiesta.

    Processo CORS

  1. Il browser richiede la risorsa da una fonte diversa.
  2. Il browser aggiunge l'intestazione Origin alla richiesta.
  3. Il server valuta il titolo Origin.
  4. Il server risponde con l'intestazione Access-Control-Allow-Origin.
  5. Il browser controlla la risposta e, di conseguenza, consente o blocca la richiesta.

Comprendere il funzionamento di CORS è fondamentale per gli sviluppatori web. Impostazioni CORS configurate in modo errato possono causare vulnerabilità di sicurezza nelle applicazioni web. Pertanto, conoscere il funzionamento di CORS e saperlo configurare correttamente è essenziale per sviluppare applicazioni web sicure ed efficaci.

Processi di autorizzazione

In CORS, i processi di autorizzazione vengono utilizzati per determinare a quali risorse il server può accedere. Il server, Controllo accessi-Consenti origine È possibile consentire risorse specifiche o consentire tutte le risorse tramite il titolo. * Può usare il suo personaggio. Tuttavia, * L'utilizzo di questa funzionalità può comportare rischi per la sicurezza, pertanto è necessario prestare attenzione. Soprattutto in caso di dati sensibili, consentire l'accesso a fonti specifiche rappresenta un approccio più sicuro.

Errori e soluzioni

Gli errori CORS sono spesso causati da impostazioni del server configurate in modo errato. Uno degli errori più comuni è..., Controllo accessi-Consenti origine Questo accade perché l'intestazione è mancante o configurata in modo errato. In questo caso, il browser blocca la richiesta e visualizza un errore CORS. Per risolvere tali errori, controlla le impostazioni del server e Controllo accessi-Consenti origine È importante assicurarsi che l'intestazione sia configurata correttamente. È inoltre necessario assicurarsi che le richieste OPTIONS, note anche come richieste preflight, vengano elaborate correttamente.

Metodi per comprendere e risolvere gli errori CORS

Risorsa di origine incrociata Gli errori CORS (Common Request-Related Networking) sono un problema comune che gli sviluppatori web incontrano e per cui impiegano tempo a risolvere. Questi errori si verificano quando una pagina web tenta di richiedere risorse da una fonte diversa (dominio, protocollo o porta) e il browser blocca la richiesta per motivi di sicurezza. Comprendere e risolvere gli errori CORS è fondamentale per il corretto funzionamento delle moderne applicazioni web.

Diagnosticare gli errori CORS è il primo passo per identificare la causa del problema. Esaminare i messaggi di errore negli strumenti per sviluppatori del browser (di solito nella scheda Console) aiuta a capire quale risorsa viene bloccata e perché. I messaggi di errore spesso contengono indizi per risolvere il problema. Ad esempio, il messaggio "Nessuna intestazione 'Access-Control-Allow-Origin' è presente sulla risorsa richiesta" indica che l'intestazione CORS è mancante sul lato server.

Codice di errore Spiegazione Possibili soluzioni
403 Proibito Il server ha compreso la richiesta ma l'ha rifiutata. Verifica la configurazione CORS sul lato server. Configura correttamente le risorse consentite.
500 Errore interno del server Si è verificato un errore imprevisto sul server. Esamina i log del server e individua la causa dell'errore. Potrebbe trattarsi di un problema con la configurazione CORS.
Errore CORS (Console del browser) Il browser ha bloccato la richiesta perché violava le norme CORS. Lato server, configura correttamente l'intestazione 'Access-Control-Allow-Origin'.
ERR_CORS_REQUEST_NOT_HTTP Le richieste CORS non vengono effettuate tramite il protocollo HTTP o HTTPS. Assicurati che la richiesta venga effettuata tramite il protocollo corretto.

Esistono diversi metodi per risolvere gli errori CORS. Il metodo più comune consiste nell'aggiungere le intestazioni CORS necessarie sul lato server. ‘'Access-Control-Allow-Origin'’ L'intestazione specifica quali risorse sono autorizzate ad accedere al server. Impostare questa intestazione su '*' significa consentire tutte le risorse, ma questo approccio è generalmente sconsigliato per motivi di sicurezza. È invece più sicuro consentire solo risorse specifiche. Ad esempio, 'Access-Control-Allow-Origin: https://example.com' consente solo le richieste provenienti da 'https://example.com'.

Ecco alcuni altri punti importanti da considerare per prevenire e risolvere gli errori CORS:

    Tipi di errori

  • ‘L'intestazione 'Access-Control-Allow-Origin' è mancante o configurata in modo errato: Le intestazioni corrette non sono impostate lato server.
  • Questioni da verificare prima del volo: ‘Il server non ha elaborato correttamente la richiesta 'OPTIONS'.
  • Problemi di credenziali: I cookie o le informazioni di autenticazione non vengono inviati correttamente.
  • Problemi di instradamento tra le sorgenti: Le linee guida non sono in linea con le politiche CORS.
  • Problemi con il server proxy: I server proxy non trasmettono correttamente le intestazioni CORS.
  • Requisiti del protocollo HTTPS: Blocco delle richieste effettuate tramite connessioni HTTP non sicure.

Oltre alle modifiche lato server per risolvere gli errori CORS, è possibile apportare anche alcune modifiche lato client. Ad esempio, potrebbe essere possibile instradare le richieste utilizzando un server proxy o utilizzare metodi di scambio dati alternativi come JSONP. Tuttavia, è importante notare che questi metodi potrebbero creare vulnerabilità di sicurezza. Pertanto, la soluzione migliore In genere, ciò implica garantire la corretta configurazione CORS sul lato server.

Migliori pratiche relative a CORS

Risorsa di origine incrociata Una corretta configurazione del CORS (Cognitive Responsibility Reduction) è fondamentale per garantire la sicurezza e la funzionalità delle applicazioni web. Una policy CORS configurata in modo errato può causare vulnerabilità e consentire accessi non autorizzati. Pertanto, è importante prestare attenzione e seguire le best practice durante l'implementazione del CORS.

Migliori pratiche Spiegazione Importanza
Limitare le origini consentite. Controllo accessi-Consenti origine Nel titolo, elenca solo i domini attendibili. * Evitate di usarlo. Migliora la sicurezza e impedisce l'accesso non autorizzato.
Utilizza le tue credenziali quando necessario. Per inviare informazioni di identificazione come cookie o intestazioni di autorizzazione Controllo accessi-Consenti credenziali: vero utilizzo. Consente l'accesso a risorse che richiedono autenticazione.
Gestire correttamente le richieste di pre-volo OPZIONI Elabora correttamente le loro richieste e includi le intestazioni necessarie.Metodi di controllo degli accessi consentiti, Intestazioni di autorizzazione al controllo degli accessiFornire. Richieste complesse (ad esempio, IDOLO, ELIMINARE) garantisce che venga fatto in sicurezza.
Gestire con attenzione i messaggi di errore. Comunicare gli errori CORS all'utente in modo chiaro e comprensibile, evitando di rivelare potenziali vulnerabilità. Migliora l'esperienza utente e riduce i rischi per la sicurezza.

Per aumentare la tua sicurezza, Controllo accessi-Consenti origine Evitate di utilizzare caratteri jolly (*) nel titolo. Questo permette a qualsiasi dominio di accedere alle vostre risorse e potenzialmente consente a siti dannosi di rubare o manipolare i vostri dati. Elencate invece solo i domini specifici di cui vi fidate e a cui desiderate consentire l'accesso.

    Fasi dell'applicazione

  1. Definisci le tue esigenze: specifica quali domini devono avere accesso alle tue risorse.
  2. Controllo accessi-Consenti origine Configura l'intestazione: lato server, elenca solo i domini consentiti.
  3. Gestisci le informazioni di identità: se sono necessari cookie o intestazioni di autorizzazione, Controllo accessi-Consenti credenziali Imposta il titolo correttamente.
  4. Gestione delle richieste di pre-volo: OPZIONI Fornite loro risposte adeguate alle loro richieste.
  5. Definire un meccanismo di gestione degli errori: comunicare gli errori CORS all'utente in modo chiaro e descrittivo.
  6. Test e monitoraggio: testa regolarmente la configurazione CORS e monitora la presenza di potenziali vulnerabilità.

Inoltre, richieste pre-volo Gestirli correttamente è altrettanto importante. I browser gestiscono alcune richieste complesse (ad esempio, IDOLO O ELIMINARE prima di inviare (in questo modo) un messaggio al server OPZIONI Invia la richiesta. Il tuo server deve rispondere correttamente a questa richiesta e fornire le informazioni necessarie. Metodi di controllo degli accessi consentiti E Intestazioni di autorizzazione al controllo degli accessi Deve includere le intestazioni. Ciò consente al browser di inviare la richiesta vera e propria.

È importante testare e monitorare regolarmente la configurazione CORS. Prova diversi scenari per identificare comportamenti imprevisti o potenziali vulnerabilità. Puoi anche rilevare tentativi di accesso non autorizzato monitorando i log del server. Ricorda, la creazione di un'applicazione web sicura è un processo continuo che richiede aggiornamenti e miglioramenti costanti. Risorsa di origine incrociata Strutturando i contenuti condivisi secondo queste best practice, è possibile migliorare significativamente la sicurezza delle proprie applicazioni web.

Precauzioni da adottare quando si utilizza CORS

Risorsa di origine incrociata Quando si utilizza CORS (Cooperation Relief System), è importante considerare diversi aspetti per garantire la sicurezza e il corretto funzionamento dell'applicazione. CORS è un meccanismo che consente alle applicazioni web di scambiare dati provenienti da diverse fonti, ma se configurato in modo errato può portare a gravi vulnerabilità di sicurezza. Pertanto, è fondamentale configurare attentamente le policy CORS e seguire procedure specifiche per prevenire potenziali problemi.

Gli errori nella configurazione CORS possono consentire l'accesso non autorizzato a dati sensibili o abilitare attacchi dannosi. Ad esempio, Controllo accessi-Consenti origine Una configurazione errata dell'intestazione può consentire richieste provenienti da tutte le fonti. Ciò rappresenta un serio rischio per la sicurezza in situazioni in cui dovrebbero essere consentite solo le richieste provenienti da fonti specifiche. La tabella seguente riassume gli errori di configurazione CORS più comuni e le loro potenziali conseguenze.

Errore Spiegazione Conclusione
Access-Control-Allow-Origin: * utilizzo Consentire richieste da tutte le fonti. La vulnerabilità di sicurezza consente a siti web dannosi di accedere ai dati.
Controllo accessi-Consenti credenziali: vero con Access-Control-Allow-Origin: * utilizzo Consente la trasmissione delle informazioni di identificazione a tutte le fonti (ma viene bloccata dai browser). Comportamento inatteso, autenticazione errata.
Consentire metodi HTTP errati Sebbene alcuni metodi debbano essere consentiti solo se necessario, come ad esempio GET o POST, tutti i metodi dovrebbero essere consentiti. Potenziali vulnerabilità di sicurezza, manipolazione dei dati.
Accettazione di intestazioni non necessarie È necessario accettare solo le intestazioni indispensabili, ma sono accettate tutte. Vulnerabilità di sicurezza, trasferimento di dati non necessario.

Un altro punto importante da considerare quando si utilizza CORS è la corretta configurazione del meccanismo di richiesta preflight. Le richieste preflight sono richieste OPTIONS che i browser inviano al server per verificare le policy CORS del server prima di inviare la richiesta vera e propria. Se il server non risponde correttamente a queste richieste, la richiesta effettiva viene bloccata. Pertanto, è necessario assicurarsi che il server risponda correttamente alle richieste OPTIONS.

Punti da considerare

  • Controllo accessi-Consenti origine Struttura il titolo in modo corretto. Consenti l'accesso solo da fonti attendibili.
  • Controllo accessi-Consenti credenziali Fai attenzione quando usi il titolo. Evita di usarlo se non è necessario.
  • Configurare correttamente il meccanismo di richiesta preflight. Fornire risposte accurate alle richieste OPTIONS.
  • Consenti solo i metodi e le intestazioni HTTP necessari. Blocca quelli non necessari.
  • Aggiorna regolarmente la configurazione CORS e verificane la presenza di vulnerabilità.
  • Utilizzare strumenti di debug per identificare e risolvere gli errori CORS.

Utilizzare gli strumenti per sviluppatori del browser per la risoluzione dei problemi relativi agli errori CORS è molto utile. Questi strumenti possono aiutarti a individuare la fonte del problema mostrando errori e avvisi relativi a CORS. Puoi anche esaminare i log lato server per verificare se le tue policy CORS vengono implementate correttamente. Ricorda, una policy CORS configurata correttamente è fondamentale per migliorare la sicurezza della tua applicazione web e l'esperienza utente.

Domande frequenti

Perché CORS è importante e in che modo influisce sul processo di sviluppo web?

CORS migliora la sicurezza dei siti web impedendo a fonti dannose di accedere a dati sensibili. Ciò contribuisce a proteggere le informazioni degli utenti e l'integrità dell'applicazione. Nel processo di sviluppo web, consente un'esperienza sicura e stabile permettendo una condivisione controllata delle risorse tra domini diversi. Comprendere questo meccanismo è fondamentale per gli sviluppatori al fine di colmare potenziali vulnerabilità e creare applicazioni senza interruzioni.

In che modo i browser implementano le policy CORS e quali intestazioni HTTP vengono utilizzate in questo processo?

I browser eseguono automaticamente controlli CORS quando una pagina web richiede risorse da un altro dominio. Durante questo processo, il browser invia un'intestazione "Origin" al server. Il server risponde con un'intestazione "Access-Control-Allow-Origin". Il browser confronta i valori di queste intestazioni per determinare se la richiesta è sicura. Inoltre, intestazioni come "Access-Control-Allow-Methods", "Access-Control-Allow-Headers" e "Access-Control-Allow-Credentials" vengono utilizzate per specificare i metodi, le intestazioni e le credenziali consentiti per la richiesta. Una corretta configurazione di queste intestazioni è fondamentale per prevenire problemi CORS.

Quali sono le cause più comuni degli errori CORS e come posso identificarle?

Le cause più comuni di errori CORS includono una configurazione errata dell'intestazione 'Access-Control-Allow-Origin' sul server, richieste provenienti da porte o protocolli diversi, errori nelle richieste preflight e un'elaborazione errata delle credenziali. È possibile utilizzare gli strumenti per sviluppatori del browser per identificare questi errori. I messaggi di errore visualizzati nella scheda Console di solito indicano l'origine del problema CORS. È inoltre possibile verificare le risposte CORS del server esaminando le intestazioni HTTP nella scheda Rete.

'Che cos'è una "richiesta di pre-volo" e quando viene attivata?

'Una "richiesta preliminare" è una richiesta OPTIONS che il browser invia al server per chiedere quali metodi e intestazioni HTTP utilizzare prima di inviare la richiesta vera e propria. Questa richiesta viene attivata soprattutto quando si utilizzano metodi HTTP diversi da GET e POST (come PUT, DELETE, ecc.) o quando si aggiungono intestazioni personalizzate. Il server deve fornire una risposta CORS corretta a questa "richiesta preliminare"; in caso contrario, la richiesta effettiva verrà bloccata.

È possibile disabilitare o aggirare il CORS e quali sono i potenziali rischi?

CORS è un meccanismo di sicurezza implementato lato browser. Configurando le intestazioni CORS lato server, si controlla a quali risorse è consentito l'accesso. Disabilitare completamente CORS è generalmente sconsigliato, poiché ciò può rendere il sito web vulnerabile a diverse falle di sicurezza. Tuttavia, durante lo sviluppo o in specifici scenari di test, CORS può essere temporaneamente aggirato tramite plugin del browser o server proxy. È importante che queste soluzioni alternative non vengano utilizzate in un ambiente di produzione.

Quali sono le vulnerabilità di sicurezza legate al CORS e quali misure dovremmo adottare per prevenirle?

Le vulnerabilità CORS più comuni includono l'impostazione dell'intestazione 'Access-Control-Allow-Origin' su '*' (consentendo l'accesso a chiunque) e la possibilità per siti dannosi di accedere alle credenziali. Per prevenire queste vulnerabilità, è necessario limitare l'intestazione 'Access-Control-Allow-Origin' ai soli domini consentiti, utilizzare con cautela l'intestazione 'Access-Control-Allow-Credentials' e implementare ulteriori misure di sicurezza lato server (ad esempio, protezione CSRF).

Quali approcci lato server sono disponibili per la configurazione CORS e come posso scegliere quello più adatto?

Esistono diversi approcci lato server per la configurazione CORS. Questi includono l'impostazione manuale delle intestazioni HTTP, l'utilizzo di un middleware CORS o la configurazione di un server web (ad esempio, Nginx o Apache). L'approccio più adatto dipende dalle esigenze dell'applicazione, dalla tecnologia utilizzata e dall'infrastruttura del server. Sebbene l'utilizzo di un middleware offra generalmente una soluzione più flessibile e gestibile, l'impostazione manuale delle intestazioni può essere sufficiente per applicazioni semplici.

Come devo gestire le impostazioni CORS nei diversi ambienti (sviluppo, test, produzione)?

È possibile utilizzare variabili d'ambiente o file di configurazione per gestire le impostazioni CORS in ambienti diversi. In un ambiente di sviluppo, è possibile utilizzare impostazioni meno restrittive (ad esempio, 'Access-Control-Allow-Origin: *') per ridurre gli errori CORS, ma è assolutamente sconsigliato utilizzarle in un ambiente di produzione. In un ambiente di test, è opportuno utilizzare impostazioni CORS più restrittive che replichino l'ambiente di produzione. In un ambiente di produzione, è consigliabile utilizzare la configurazione più sicura, limitando l'intestazione 'Access-Control-Allow-Origin' ai soli domini consentiti. Ciò può essere ottenuto creando file di configurazione separati per ciascun ambiente o utilizzando variabili d'ambiente.

Ulteriori informazioni: Scopri di più su CORS.

Lascia un commento

Accedi al pannello clienti, se non hai un account

© 2020 Hostragons® è un provider di hosting con sede nel Regno Unito con numero 14320956.