Quando si lavora con un sito basato su risorse (come un'applicazione MVC o un servizio REST), abbiamo due opzioni principali quando un client tenta di GET
accedere a una risorsa a cui non ha accesso:
- 403 , che afferma che il cliente non è autorizzato ; o
- 404 , che indica che la risorsa non esiste (o non è stata individuata).
La saggezza comune e la pratica comune sembrano essere di rispondere con la verità, cioè una 403. Ma mi chiedo se questa sia effettivamente la cosa giusta da fare.
I sistemi di accesso sicuro non ti dicono mai il motivo di un errore di accesso. Vale a dire, per quanto riguarda il client, non vi è alcuna differenza rilevabile tra un nome utente inesistente e una password errata. Lo scopo è di non rendere identificabili gli ID utente, o peggio, gli indirizzi e-mail.
Dal punto di vista della privacy , sembra molto più sicuro restituire un 404. Mi viene in mente l'incidente in cui si dice che qualcuno abbia scoperto i vincitori di un reality show (Survivor, credo) osservando quali risorse non esistevano sul sito vs. quali lo hanno fatto. Sono preoccupato per un 403 che potenzialmente fornisce informazioni sensibili come un numero di serie o un numero di conto.
Ci sono validi motivi per non restituire un 404? Una politica 404 potrebbe avere effetti collaterali negativi altrove? In caso contrario, perché la pratica non è più comune?