Lorsque vous travaillez avec un site basé sur des ressources (telle qu'une application MVC ou un service REST), nous avons deux options principales lorsqu'un client essaie GET
une ressource à laquelle il n'a pas accès:
- 403 , qui dit que le client n'est pas autorisé ; ou
- 404 , qui indique que la ressource n'existe pas (ou n'a pas pu être localisée).
La sagesse et la pratique communes semblent être de répondre par la vérité - c'est-à-dire un 403. Mais je me demande si c'est vraiment la bonne chose à faire.
Les systèmes de connexion sécurisés ne vous disent jamais la raison d'un échec de connexion. C'est-à-dire qu'en ce qui concerne le client, il n'y a pas de différence détectable entre un nom d'utilisateur inexistant et un mot de passe incorrect. Le but est de ne pas rendre les ID d’utilisateur - ou pire, les adresses électroniques - découvrables.
Du point de vue de la protection de la vie privée , il semble beaucoup plus sûr de retourner un 404. Je me souviens de l'incident dans lequel quelqu'un aurait découvert les gagnants d'une émission de téléréalité (Survivor, je pense) en regardant quelles ressources n'existaient pas sur le site. site vs qui ont fait. Je crains qu'un 403 puisse potentiellement donner des informations sensibles telles qu'un numéro de série ou un numéro de compte.
Existe-t-il des raisons impérieuses de ne pas renvoyer un 404? Une politique 404 pourrait-elle avoir des effets secondaires négatifs ailleurs? Si non, alors pourquoi la pratique n'est-elle pas plus courante?