E 'possibile proteggere json api scraping usando token casuali?

5

Ho creato una riposante API json per un negozio online utilizzando Laravel.

Ora desidero creare un'app AngularJS per eseguire l'applicazione Web front-end. I prezzi dei prodotti per il mio negozio devono essere aggiornati ogni secondo, quindi Angular ha bisogno di scaricare il prodotto dal server una volta al secondo per aggiornare l'html.

Desidero in qualche modo fare qualcosa per proteggere questi dati json accessibili pubblicamente dal furto di scraper / bot che colpiscono ripetutamente la mia API per rubare i miei dati sui prodotti e sui prezzi.

I miei pensieri:

Ogni risposta di json api contiene un token di uso casuale una volta (sono consapevole di fare cose per fermare le collisioni).

Questo token casuale viene iniettato tramite AngularJS in un campo nascosto all'interno della pagina html. Angularjs legge il token nascosto prima di richiedere nuovamente l'API e lo utilizza nell'intestazione della richiesta successiva.

Una risposta JSON viene fornita solo con il token corretto nell'intestazione. Una volta che il token è stato utilizzato, scade e qualsiasi tentativo di riutilizzare il token scaduto, determina che l'indirizzo IP viene bloccato per un periodo di tempo o segnalato all'amministratore per indagare.

C'è un modo migliore di fare quanto sopra? C'è qualche tipo di reale soluzione disponibile al mio problema? Considerando che sto pagando il feed dei prezzi dei prodotti in primo luogo, non voglio davvero che qualcuno mi prenda da me gratuitamente solo perché ho esposto un api!

Anche se capisco che probabilmente non c'è modo di essere sicuro al 99% che qualcuno possa trovare un modo per raschiare il mio json, ci deve essere qualcosa di relativamente semplice che posso fare per proteggere il mio feed JSON da stupidi robot / scrapers usando semplicemente arricciatura rubare dati.

    
posta Gravy 16.12.2013 - 13:44
fonte

1 risposta

3

La risposta breve è: non esiste un modo adeguato per proteggere completamente i dati accessibili pubblicamente dalla copia.

La copia economica senza perdite è uno dei principali vantaggi dei dati digitali. Chiunque possa accedere ai tuoi dati è in grado di copiarlo. E non è facile sbarazzarsi di questa abilità.

Il trucco con nonce suggerito da te rende lo scraping un po 'più complesso, ma non impossibile, e nemmeno molto più difficile. Un bot può valutare tutto ciò che può essere valutato da un browser web. E in effetti, i bot moderni di solito lo fanno. Possono eseguire un browser Web senza testa (come PhantomJS) e "vedere" le pagine esattamente come l'utente vede. I robot più avanzati emulano i clic del mouse e ritardi casuali tra le azioni, quindi è molto difficile distinguerli dagli umani.

E se i tuoi dati sono veramente pubblici (non c'è autenticazione), non esiste un modo efficace per proteggerli dai bot, sebbene tu possa rendere la loro vita un po 'più difficile. è sempre un confronto tra il proprietario di un negozio e il proprietario di un bot. Il proprietario del negozio cerca di rendere il robot più complesso e costoso rendendo i dati più difficili da estrarre. Lo sviluppatore del bot cerca di rendere il bot più sofisticato. Continua fino a quando il robot oi meccanismi di protezione diventano troppo costosi per gli affari di qualcuno.

Puoi usare diversi trucchi come l'offuscamento dei dati, captcha, nonce, alcune euristiche per rilevare l'attività umana. Filtrerà la maggior parte degli spider di massa che non sono sviluppati appositamente per il tuo sito web. Se qualcuno è diretto al tuo negozio e sviluppa un raschietto appositamente per questo, è probabile che tu non possa proteggere da lui.

Quindi penso che dovresti andare al lato chiaro e ridurre al minimo i costi rendendo la tua API JSON il più semplice e diretta possibile.

    
risposta data 19.12.2013 - 23:10
fonte

Leggi altre domande sui tag