Originariamente richiesto a: link
Avevamo il requisito di consentire le richieste di origine incrociata a condizione che l'origine fosse parte del dominio aziendale. Sebbene questa domanda non sia specifica per C # o API Web, i frammenti seguenti dimostrano la nostra strategia.
Abbiamo una collezione di espressioni regolari che definiscono le origini consentite:
private static readonly Regex[] AllowedOriginPatterns = new[]
{
new Regex(@"https?://\w[\w\-\.]*\.company.com",
RegexOptions.Compiled | RegexOptions.IgnoreCase)
};
Successivamente, nel nostro attributo ICorsPolicyProvider
, testiamo l'origine. Se l'origine corrisponde a qualsiasi modello, aggiungiamo l'origine al set di origini consentite:
var requestOrigin = request.GetCorsRequestContext().Origin;
if (!string.IsNullOrWhiteSpace(requestOrigin) &&
AllowedOriginPatterns.Any(pattern => pattern.IsMatch(requestOrigin)))
{
policy.Origins.Add(requestOrigin);
}
Il vantaggio di questo approccio è che possiamo supportare un set ampio e flessibile di origini autorizzate e limitare le origini non autorizzate, il tutto senza collocare centinaia di origini nelle intestazioni.
Abbiamo un problema con la riscrittura delle intestazioni HTTP sulla parte del nostro proxy inverso. In alcune circostanze, il proxy inverso sostituisce il valore Access-Control-Allow-Origin
con l'host. Sembra strano per me, ma questa non è la mia domanda.
È stato proposto di modificare il nostro codice in modo che se l'origine soddisfa la nostra condizione preliminare, restituiamo *
anziché echeggiare l'origine nella risposta.
La mia domanda è se apriamo una potenziale vulnerabilità di sicurezza restituendo Access-Control-Allow-Origin: *
alle origini che corrispondono alle nostre precondizioni. Mi auguro che i browser controllino le intestazioni di controllo degli accessi ad ogni richiesta. Se è così, non sono eccessivamente preoccupato. In caso contrario, posso immaginare un utente malintenzionato che esegue un sito Web non attendibile sfruttando i browser che in precedenza hanno ricevuto un *
per un'origine attendibile.
Ho letto l'articolo OWASP sulla verifica delle intestazioni CORS . L'articolo non riflette nessuna delle mie preoccupazioni, il che è rassicurante; tuttavia, volevo informarmi della comunità prima di andare avanti.