Come garantire che solo la mia app per singola pagina possa effettuare richieste a un'API

1

Ho un'API REST che può potenzialmente servire più client Web.

Desidero assicurarmi che solo la mia app singola pagina su my-one-e-only-web-cleint.com possa effettuare richieste alla mia API. Come posso fare questo?

Al momento non c'è molto che impedisca a qualcuno di copiare la fonte del mio sito Web e di fungere da copia della mia app per una sola pagina su my-one-e-lyly-web-cleint.com.

Solo il controllo che ho ora è:

  • Sul lato server: controllo l'origine dell'intestazione della richiesta e permetto solo le richieste di my-one-and-only-web-cleint.com

Ma la mia comprensione è che puoi modificare manualmente l'intestazione, quindi questo controllo può essere ignorato.

    
posta garbage collection 27.07.2014 - 10:12
fonte

2 risposte

1

Questo sembra prevenire un attacco CSRF . La Stessa politica di origine impedirà già a qualsiasi cosa all'interno della tua API di essere letto da un altro dominio, ma per impedire richieste che lo rendono modifiche al tuo sistema dovrai proteggerti contro CSRF.

On server side: I check for request header's origin and only allow requests from my-one-and-only-web-cleint.com

Il controllo dell'intestazione Origin o personalizzato come X-Requested-With è un modo valido per battere CSRF .

Un utente malintenzionato non può falsificare questa intestazione nel browser web, quindi chiunque si connetta al sito dell'attaccante che ha collegato alla propria API non sarà in grado di utilizzarlo poiché l'intestazione del browser non può essere alterata.

Dovresti anche fare affidamento su un sistema di autorizzazione per impedire che l'attaccante esegua richieste API lato server (dove possono impostare qualsiasi intestazione che vogliono).

    
risposta data 27.07.2014 - 18:57
fonte
1

Sembra una situazione simile agli attacchi CSRF, quindi dovrebbe essere indirizzabile con i token anti-contraffazione.

I token anti-contraffazione dovrebbero ottenere ciò di cui hai bisogno. Ogni volta che ricevi una richiesta web, servi un token anti-contraffazione al client come parte del FORM o script o webapp. Il token incorpora valori come data, ID di accesso e IP del client, crittografati con una chiave segreta nota solo al tuo server. Quindi gestisci solo le richieste che includono token validi.

Un intermediario non può modificare il tuo sito e ospitare la sua API sulla loro, perché non sarà in grado di servire token validi.

Ecco ulteriori informazioni su come farlo in ASP.NET, ma lo stesso vale in altre lingue.

link

    
risposta data 27.07.2014 - 10:58
fonte

Leggi altre domande sui tag