Sto creando un'API REST per archiviare dati sensibili per la sicurezza sia per il mio cliente che per i partner di terze parti.
Ogni richiesta viene convalidata utilizzando un HMAC di determinati dati che viene inserito in una chiave temporanea assegnata per un breve periodo dopo l'accesso dell'utente. Ovviamente tutto viene eseguito su TLS. Ogni richiesta viene registrata, insieme alle chiavi dei dati restituiti, nonché le chiavi di tutti i dati che sarebbero stati restituiti se la richiesta non fosse stata bloccata per qualche motivo.
Se i dati non sono presenti, o se i dati in una posizione possono essere letti da un particolare utente, ma non aggiornati, o se la richiesta di aggiornamento non è corretta, il server dovrebbe restituire un messaggio di errore significativo oppure no?
-
Se l'utente non ha le autorizzazioni per eseguire un'azione, è necessario restituire una risposta 401 o 403, indicando che la richiesta non è riuscita a causa della mancanza di autorizzazioni per eseguire l'azione. Altri codici di risposta possono essere utilizzati nel caso in cui i dati non siano corretti, oppure i tipi di dati previsti non corrispondono (invio di una stringa a un campo int, ecc.). Fondamentalmente, seguire le buone pratiche REST / HTTP e registrare tutto, ma non fornire alcuna informazione all'utente oltre un suggerimento di base su cosa è andato storto.
-
Non dare mai a nessuno alcuna informazione, nel caso in cui possa essere utilizzata contro il sistema in qualche modo. Solo sempre restituire un errore di 500, senza descrizione di alcun tipo. Esiste un certo livello di disaccordo in merito alla possibilità o meno di restituire un 404 o, in alternativa, restituire una risposta vuota o un errore 500. Se uno sviluppatore di terze parti incontra queste risposte e non capisce il perché, deve contattare la nostra azienda, chiedere a qualcuno di controllare i log e spiegare come eseguire correttamente le richieste.
Qualcuno ha esperienza "dalle trincee" su quale metodologia abbia più senso? Di particolare interesse è come bilanciare la sicurezza con le richieste di usabilità e supporto.