È eccessivamente ingegneristico se aggiungo protezione contro illeciti intenzionali di un utente (per dirla leggermente), se il danno che l'utente può subire non è correlato al mio codice?
Per chiarire, sto esponendo un semplice servizio JSON RESTful come questo:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
Il servizio stesso non è pensato per essere utilizzato tramite un browser, ma solo da applicazioni di terze parti, controllate dall'utente (come app telefoniche, app desktop, ecc.). Inoltre, il servizio stesso dovrebbe essere apolide (ovvero senza sessione).
L'autenticazione viene eseguita con l'autenticazione di base su SSL.
Sto parlando di un possibile comportamento "dannoso" come questo:
L'utente inserisce l'URL GET in un browser (nessun motivo ma ...). Il browser richiede l'autent di base, lo elabora e memorizza l'autent per la sessione di navigazione corrente. Senza chiudere il browser, l'utente visita un sito Web dannoso, che ha un javascript CSRF / XSRF dannoso che effettua un POST al nostro servizio.
Lo scenario di cui sopra è altamente improbabile e so che dal punto di vista commerciale non dovrei preoccuparmi troppo. Ma per migliorare la situazione, pensi che se anche il nome utente / la password sono richiesti nei dati POST JSON, ti aiuteranno?
O dovrei eliminare completamente l'autent di base, sbarazzarmi del GET e utilizzare solo POST / PUT con le informazioni di autorizzazione in essi? Poiché le informazioni recuperate tramite GET possono anche essere sensibili.
Dall'altro lato, l'utilizzo di intestazioni personalizzate è considerato pura implementazione REST? Posso eliminare l'autent di base e utilizzare intestazioni personalizzate. In questo modo, è possibile evitare almeno l'attacco CSRF da un browser e le applicazioni che utilizzano il servizio imposteranno nome utente / password in heather personalizzato. Male per questo approccio è che ora il servizio non può essere utilizzato da un browser.