Cifra / firma una richiesta da client a API?

2

Stiamo creando un'API JSON sulla nostra applicazione web Ruby on Rails, utilizzando JSONAPI :: Resources per esporre endpoint e Doorkeeper per gestire l'autenticazione dell'utente.

La maggior parte dei nostri endpoint API sarà esposta solo agli utenti autenticati e Doorkeeper probabilmente farà un ottimo lavoro per farli rispettare. Ma abbiamo ancora un paio di endpoint che non saranno autenticati: iscriviti, accedi, conferma dell'account e forse un altro paio.

Sono preoccupato che lasciare che gli endpoint dell'API completamente aperti ci espongano agli attacchi, sotto forma di spamming di nuovi account, ad esempio.

  1. Forse mi preoccupo più del necessario? Le API di solito rendono questo tipo di endpoint non sicuro e aggiungono sistemi di prevenzione come la limitazione?
  2. In caso contrario, significa firmare (o crittografare) le mie richieste prima di inviarle al server API l'approccio giusto?
  3. E se è così, hai qualche raccomandazione o un approccio preferito in tal senso?

Ho provato a utilizzare parole chiave di Google come "richiesta di segno API di rails" o "richiesta di crittografia api di rails", ma non sono sicuro che i risultati siano pertinenti o raccomandati.

I primi clienti che parleranno con questa API saranno le applicazioni Android e iOS, e potremmo aggiungere nelle future applicazioni web lato client (al momento, la nostra applicazione Web è monolitica e non utilizza l'API).

    
posta David Stosik 18.09.2015 - 16:30
fonte

1 risposta

1

La firma è inutile quando non hai una chiave pubblica del firmatario. Non è comunque possibile convalidare la firma, quindi un utente malintenzionato che desidera inviarti spam con nuovi account potrebbe semplicemente inviare una firma fittizia. Esistono misure più efficaci che puoi adottare come captcha o limitazione basata su IP.

La crittografia, d'altra parte, non è mai una cattiva idea. "Iscriviti" e "Accedi" richiedono lo scambio di informazioni sensibili, quindi devono essere crittografate. Inoltre, nell'era del data mining tutto può essere informazioni riservate, incluso il fatto che John Smith ha esaminato il profilo dell'utente 29252 su esempio.com al 2015-08-19 17:02:03. Quindi anche le informazioni apparentemente innocue dovrebbero essere criptate quando possibile. Rendere il tuo intero sito web - sia API che contenuto statico - https-only o almeno https-capable non è mai sbagliato.

    
risposta data 18.09.2015 - 16:57
fonte

Leggi altre domande sui tag