Может ли метод HTTP GET быть небезопасным? - PullRequest
0 голосов
/ 03 июня 2019

Мы разрабатываем HTTP REST API. Этот API предоставляет определенный тип ресурсов через метод HTTP GET. Внутренне приложение извлекает данные из баз данных, выполняет некоторую обработку, а затем показывает результаты в ответе HTTP GET.

То, что мы хотим добавить к этой схеме, - это некоторая устойчивость к повреждению БД. Из-за формата данных, хранящихся в БД, у нас есть две возможности: либо данные могут быть декодированы после извлечения, либо нет. Мы стремимся пометить записи, которые нельзя декодировать как «поврежденные» записи. Следовательно, приложение сможет фильтровать только поврежденные записи, перечислять их ...

Проблема, с которой мы сталкиваемся, состоит в том, что, поскольку только метод GET декодирует содержимое БД, чтобы показать его клиентскому вызову, только метод GET имеет информацию о поврежденной записи. Но поскольку GET должен быть безопасным, можем ли мы позволить GET изменять состояние ресурса в случае его повреждения, несмотря на HTTP-контракт, в котором конкретно говорится, что GET никогда не должен этого делать?

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

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Важно то, что это безопасно с точки зрения клиента. Что на самом деле делает ваш сервер, на самом деле не имеет значения (см. https://greenbytes.de/tech/webdav/rfc7231.html#safe.methods: ". Это определение безопасных методов не препятствует тому, чтобы реализация включала в себя потенциально опасное поведение, которое не полностью доступно только для чтения или которое вызывает побочные эффекты, пока Вызов безопасного метода. Однако важно то, что клиент не запрашивал такого дополнительного поведения и не может нести за него ответственность. Например, большинство серверов добавляют информацию запроса для доступа к файлам журнала при завершении каждого ответа, независимо от метод, который считается безопасным, даже если хранилище журналов может заполниться и привести к сбою сервера. Аналогичным образом, безопасный запрос, инициируемый выбором рекламы в Интернете, часто будет иметь побочный эффект при взимании платы с рекламного аккаунта. ")

0 голосов
/ 03 июня 2019

Может ли метод HTTP GET быть небезопасным?

Да.Вот Рой Филдинг, отвечающий на этот вопрос :

HTTP не пытается требовать, чтобы результаты GET были безопасными.Для этого требуется, чтобы семантика операции была безопасной, и, следовательно, это ошибка реализации, а не интерфейса или пользователя этого интерфейса, если в результате произойдет что-либо, что приведет к потере имущества (денег, кстати,Считается, что это свойство считается собственностью)и т. д.

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

...