web-dev-qa-db-fra.com

Accès refusé: 403 ou 404?

Quel code d'état doit être renvoyé si quelqu'un demande l'accès à l'entité qu'il n'est pas autorisé à voir? Vous allez probablement dire que c'est 403: Interdit. Mais est-ce une pratique courante de retourner 404 à la place? Je ne veux pas que quelqu'un sache que cette entité existe même s'il n'est pas autorisé à la voir. Qu'est-ce que tu penses?

11
Robo Robok

Utilisez 404 non trouvé.

Le code d'état 404 peut également être utilisé dans 403 scénarios, lorsque le serveur ne souhaite pas renvoyer la raison pour laquelle il refuse de servir la demande. Un bon exemple est lorsque le serveur détecte une sorte d'attaque, qui pourrait être une attaque par force brute . Dans ce cas, le serveur répond par 404 Introuvable au lieu de 403 Interdit et une explication.

Source: Sécurité des API Web ASP.NET Pro

19
Teoman shipahi

Renvoie 403 Forbidden. Si vous retournez ceci pour chaque demande que le client n'est pas autorisé à accéder et si vous never return 404 Not Found, le client ne sait rien.

Tout dépend de l’importance que cela revêt pour vous:

Je ne veux pas que quelqu'un sache que cette entité existe même s'il n'est pas autorisé à la voir.

Si cela est vraiment important, retournez toujours 403 Forbidden.

0
user1907906

En fait ça dépend..

Si les URL de vos points de terminaison révèlent des informations sensibles (par exemple, dans l'API Dropbox, vous faites référence aux fichiers par leur nom plutôt que par leur ID - les URL contiennent donc les noms de fichier) ou utilisez peut-être des ID séquentiels (par exemple, des ID ascendants peut être forcé), retour 404.

Si vous devez prendre en charge une fonctionnalité "Demander l'accès" aux ressources pour lesquelles vous ne disposez pas des autorisations, renvoyez 403 afin que votre côté client puisse faire la différence.

De manière générale, si votre API utilise des identifiants et ne révèle jamais d’informations dans le cadre de ses URL et que vous utilisez des identifiants uniques (UUID) comme identifiants, je choisirais 403 ... comme avec beaucoup d’applications connues et très sécurisées (Google, Microsoft, etc.). ..).

0
Moshe Bixenshpaner