Працюючи з сайтом, що базується на ресурсах (наприклад, програма MVC або послуга REST), ми маємо два основні варіанти, коли клієнт намагається GET
отримати ресурс, до якого він не має доступу:
- 403 , де йдеться про те, що клієнт несанкціонований ; або
- 404 , де йдеться про те, що ресурс не існує (або його не можна було знайти).
Здається, загальна мудрість і звичайна практика відповідати правдою - тобто 403. Але мені цікаво, чи це насправді правильно робити.
Безпечні системи входу ніколи не повідомляють вам причину відмови входу. Тобто, що стосується клієнта, то між неіснуючим іменем користувача та невірним паролем не виявляється різниці. Мета полягає в тому, щоб не робити ідентифікаторів користувачів - або ще гірше, адреси електронної пошти - відкритими.
З точки зору конфіденційності , здається, набагато безпечніше повернути 404. Мені пригадується інцидент, коли хтось, як повідомляється, дізнався переможців реаліті-шоу (Survivor, я думаю), переглядаючи, які ресурси не існували на сайт проти того, що робили. Мене хвилює те, що 403 потенційно може передавати конфіденційну інформацію, наприклад, серійний номер або номер рахунку.
Чи є вагомі причини не повернути 404? Чи може політика 404 мати негативні побічні ефекти в інших місцях? Якщо ні, то чому практика не є більш поширеною?