Вариант использования для ответа с кодом состояния 403

1

Недавно я начал разрабатывать Java EE-приложения, и я пытаюсь понять больше о кодах состояния HTTP и когда их следует использовать.

Один случай, который у меня есть, - это когда пользователь входит в систему и хочет проверить статус заказа. Требование состоит в том, что пользователь не может проверить статус заказа, который им не принадлежит.

URL для проверки заказа, например:

mysite.com/order/status?id=22594

Сервлет, который обрабатывает этот запрос, будет проверять параметр ID, а также отключить и получить заказ из базы данных.

Если пользователь вводит идентификатор заказа, который они не отправили, было бы целесообразным вернуть 403 или ответить не на заказ?

  • 0
    Я бы перешел к правильному 403, потому что для пользователя запрещен доступ к этому URL.
Теги:
http
java-ee
http-status-code-403

4 ответа

1
Лучший ответ

В вашей типичной ситуации я могу думать о следующих случаях использования:

Идентификатор заказа не найден

  • Отправить 404. Заказ не существует.

Идентификатор заказа принадлежит кому-то другому.

  • Отправить 403, если пользователь вошел в систему. (403 означает: "Я знаю, кто вы, и вам не разрешен доступ к этому ресурсу)
  • Отправить 404. Иногда он подходит для отправки этого статуса. Вы не хотите, чтобы конечный клиент знал, существует ли ресурс. Либо ресурс существует для этого аутентифицированного и авторизованного пользователя, либо нет.

Пользователь не зарегистрирован

  • При попытке доступа к ресурсу отправьте запрос 401 "Аутентификация".
3

от w3.org :

Сервер понял запрос, но отказывается его выполнять. Авторизация не поможет, и запрос НЕ ДОЛЖЕН повториться. Если метод запроса не был HEAD, и сервер хочет сообщить, почему запрос не был выполнен, ему ДОЛЖЕН описать причину отказа в сущности. Если сервер не хочет предоставлять эту информацию клиенту, вместо этого может использоваться код состояния 404 (Not Found).

в вашем случае, по соображениям безопасности, может быть хорошей идеей показать, что порядок не найден, но в целом ответ составляет 403

2

Если пользователь не отправил заказ или если заказ не принадлежит пользователю, тогда его необходимо вернуть любой из нижеприведенных ответов:

  1. 404- Ресурс не найден. Это не покажет пользователю, существует ли этот идентификатор заказа для другого пользователя.
  2. 401-Несанкционированное. Это покажет, что порядок существует, но не принадлежит запрашивающему пользователю.

С точки зрения безопасности лучше вернуть 404.

2

Я бы склонялся к возврату HTTP 404 для идентификатора заказа, который пользователь не отправил (отсутствует или нет, его порядок). Примером здесь является то, что пользователю разрешен доступ к странице /order/status но не указан конкретный идентификатор заказа.

Я возвращаю HTTP 403 в случае неправильного идентификатора заказа, который отправляет неправильное сообщение пользователю (здесь вы не можете его использовать).

Независимо от того, какой заказ не существует или заказ не принадлежит аутентифицированному пользователю; ошибка должна быть одинаковой или вы рискуете "утечкой" информации о заказах в вашей системе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню