Prevenire l'abuso dell'API che viene chiamato tramite il lato client Javascript

0

Sto configurando un micro-servizio Gateway AWS API + Lambda che restituirà dati non sensibili ma specifici dell'utente. Ciò significa che le risposte dal servizio non possono essere memorizzate nella cache e fornite a più utenti.

Esiste la possibilità che terze parti non autorizzate colpiscano questo servizio e causino forti picchi nell'utilizzo delle risorse.

Perché deve essere una richiesta lato client?

Le pagine del sito Web principale vengono solitamente memorizzate nella cache e inviate da CloudFront senza inviare ogni richiesta al server di origine, pertanto è impossibile effettuare questa richiesta sul lato server per ciascun utente.

Idee che ho avuto

  1. Richiede una chiave API da utilizzare per accedere al servizio.

    È improbabile che questo sia il miracolo magico perché anche se la chiave stessa è nascosta effettuando una chiamata a uno script back-end separato, tutto ciò che un utente non autorizzato dovrebbe fare è chiamare lo script anziché l'API direttamente e otterrebbe gli stessi risultati.

  2. Aggiunta di controlli personalizzati basati su intestazioni, origini, ecc. prima di inviare una risposta valida dall'API

    Queste cose possono essere falsificate in modo relativamente semplice, quindi non è affatto garantito che funzioni, ma potrebbe scoraggiare molte persone meno motivate.

C'è qualcos'altro che può essere fatto per garantire che questo servizio sia accessibile solo da persone che effettivamente visualizzano il sito Web e non da applicazioni di terze parti?

    
posta Commit 18.06.2018 - 16:02
fonte

2 risposte

1

In questo caso, vorrei aggiungere vari tipi e combinazioni di limite di velocità , ad esempio:

  • richieste massime per intervallo consentito per l'API completa
  • richieste massime per intervallo per parti specifiche dell'API, se hai determinate chiamate "costose"

Se sei in grado di identificare le chiamate non autenticate, ad es. tramite indirizzo IP o cookie o qualcosa del genere, potresti essere in grado di limitare ulteriormente questo ancora più preciso. Per esempio:.

  • richieste massime per client per intervallo per l'API completa
  • richieste massime per cliente per intervallo per parti specifiche dell'API

L'intervallo potrebbe essere qualsiasi cosa, ad es. hardcoded 5 secondi, in una finestra temporale fissa o scorrevole.

In un progetto ho implementato qualcosa di simile usando una combinazione di indirizzo IP e, se disponibile, l'id utente, e ha funzionato molto bene - proteggendo il servizio da abusi / attacchi di clienti anonimi, identificabili e anche autorizzati correttamente.

Iirc ho usato link - il readme indica anche alcuni articoli di background, ad es. link

    
risposta data 18.06.2018 - 19:58
fonte
-1

Nel contesto di limitazione del tasso penso che il gateway API di AWS abbia un meccanismo integrato, configurando ciò che è relativamente semplice. (Quote gateway API AWS)

What Are Usage Plans and API Keys? A usage plan specifies who can access one or more deployed API stages and methods — and also how much and how fast they can access them. The plan uses API keys to identify API clients and meters access to the associated API stages for each key. It also lets you configure throttling limits and quota limits that are enforced on individual client API keys.

link

Nel contesto di Utente e robot, verifica il semplice servizio di accesso, che può essere integrato con il gateway API:

link

    
risposta data 11.12.2018 - 08:58
fonte

Leggi altre domande sui tag