Cuando trabajamos con un sitio basado en recursos (como una aplicación MVC o un servicio REST), tenemos dos opciones principales cuando un cliente intenta GET
un recurso al que no tiene acceso:
- 403 , que dice que el cliente no está autorizado ; o
- 404 , que dice que el recurso no existe (o no se pudo localizar).
La sabiduría común y la práctica común parecen ser responder con la verdad, es decir, un 403. Pero me pregunto si esto es realmente lo que hay que hacer.
Los sistemas de inicio de sesión seguro nunca le dicen el motivo de un error de inicio de sesión. Es decir, en lo que respecta al cliente, no hay una diferencia detectable entre un nombre de usuario inexistente y una contraseña incorrecta. El propósito de esto es no hacer que las ID de usuario, o peor, las direcciones de correo electrónico, sean reconocibles.
Desde el punto de vista de la privacidad , parece mucho más seguro devolver un 404. Recuerdo el incidente en el que, según los informes, alguien descubrió a los ganadores de un reality show (Survivor, creo) al observar qué recursos no existían en el sitio vs. cuáles lo hicieron. Me preocupa que un 403 pueda revelar información confidencial como un número de serie o un número de cuenta.
¿Hay razones de peso para no devolver un 404? ¿Podría una política 404 tener efectos secundarios negativos en otros lugares? Si no, ¿por qué la práctica no es más común?