Я пишу модуль Node.js / NPM для защиты экспресс-серверов от Атаки DNS Rebind посредством проверки заголовка Host и Referer [sic] на стороне сервера. Администратор сервера указывает хосты и / или рефереры в белом списке, и любые запросы, которые не включают эти значения из белого списка, получат коды состояния ошибок и не получат результатов.
Что было бы наиболее подходящим Код состояния HTTP для возврата клиенту, когда они предоставляют недопустимый заголовок Host или Referer в своем запросе, или когда они не могут предоставить его вообще, когда он требуется. Я думаю о 401 Unauthorized, но я хотел получить второе мнение. Также может быть приведен аргумент для 400 Bad Request или, я полагаю, 412 Precondition Failed.
Обязан ли сервер уведомлять клиента, почему его запрос отклоняется, с помощью заголовков или тела ответа (например, требуется узел из белого списка), или можно ответить кодом ошибки и оставить клиента в недоумении в целях безопасности / обфускации?





Возможно, вы правы, лучше всего подходит Неавторизованный. Но лучше всего подходит код состояния HTTP не 401, а на самом деле 403.
Код состояния 403 говорит о The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource, or may need an account of some sort., и последняя часть этого предложения идеально подходит для вашего варианта использования.
См .: https://stackoverflow.com/a/6937030/945214
На все неавторизованные / неаутентифицированные запросы не рекомендуется отвечать какими-либо объяснениями, так как это будет утечка информации с вашего сервера: http://projects.webappsec.org/w/page/13246936/Information%20Leakage.
Вы правы! Эти ссылки и цитаты полезны. Оказывается, я отправлял 401 без необходимого заголовка WWW-Authentication, что нарушает спецификацию. 403 Forbidden кажется более подходящим. После прочтения некоторых из этих ^ ссылок кажется, что "Unauthenticated" было бы более подходящим названием для кода состояния 401 "Unauthorized" ...