2011-10-21 2 views
45

Ad esempio, controlla questo plug-in Facebook.Come mantenere segrete le chiavi API quando si utilizza il lato client Javascript?

Nella parte client la chiave API è chiaramente visibile. Cosa impedisce a un altro utente di ottenere questa chiave e di utilizzare questa funzione su un altro sito?

Ho pensato che un'implementazione molto ingenua sarebbe quella di controllare il dominio da cui proviene la richiesta, ma cose come questa sono facili da falsificare.

Se dovessi creare qualcosa di simile, come potrei fare per rendere sicuro il processo di autenticazione?

Desidero che gran parte di questo lavoro sia client, anche se una certa forma di autenticazione del server sarà richiesta sicuramente? Qualsiasi link o consiglio sarebbe molto apprezzato.

Aggiornamento

Simile question sulle chiavi di API che ho trovato utile.

+1

Hai guardato twitter @anywhere? La chiave API è aperta, ma usano altre informazioni/segreti per testare i dati –

risposta

12

In tre parole: convalida lato server. FB stesso genererà un errore quando si utilizza una chiave non corretta per il sito specificato. La chiave API non dovrebbe essere segreta (al contrario della chiave segreta).

+0

Suppongo che in tal caso la chiave API cambierà per ogni singola richiesta, giusto? – Finglas

+0

@ Finglas: No. Perché dovrebbe? La chiave API identifica la tua applicazione, che è legata a un singolo dominio; se lo si utilizza su un altro dominio, la chiave API non corrisponderà quando viene controllata su FB tramite AJAX e l'interfaccia utente non verrà caricata. – Piskvor

+5

Questo è quello che sto ottenendo. Come possiamo fidarci del dominio, se ho registrato il sito A, cosa mi impedisce di realizzare il sito B usando la stessa chiave ma inserendo le intestazioni prima di inviare una richiesta? – Finglas

2

Non l'ho fatto da solo, ma so che il tipo di attacco di cui sei preoccupato si chiama Cross-site Request Forgery (CSRF). Lo Wikipedia article su ciò fornisce alcuni suggerimenti su come prevenirlo.

+0

Questo dovrebbe essere il titolo di questa domanda. '" Come prevenire la falsificazione di richieste tra siti? "' – mr5

+0

@ mr5 Se "Prevenire CSRF" fosse il titolo, le persone come me che non conoscono il nome non troveranno la domanda – Eponymous

+0

@Enonimo Bene, hai ragione! Non riesco a ricordare perché ho scritto questo stupido commento. Ignoralo. lol – mr5