Когда использовать Permissive vs. Strict API Message Validation - PullRequest
0 голосов
/ 14 января 2019

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

Наше приложение, по сути, представляет собой большую и сложную систему управления заказами, сопоставления и диспетчеризации (аналогичную сервису совместного использования). Большинство наших конечных точек связаны с действиями на различных этапах в потоках ввода, сопоставления и управления заказами, в дополнение к управлению объектами (CRUD). Мы не планируем публично открывать этот API, поэтому единственными клиентами являются наши мобильные и веб-приложения (и, возможно, скрипты, которые мы пишем).

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

Однако в нашем случае мне кажется, что это тот случай, когда мы хотим быть строгими в том, что принимаем. Все пользователи здесь будут внутренними разработчиками, поэтому трудно представить себе множество распространенных ситуаций, когда вседозволенность дает вам надёжность по сравнению со строгим API. Мы согласились с тем, что есть значительные улучшения в разработке по сравнению со строгим API и множество ошибок, которых мы можем избежать, строго проверив во время разработки, однако есть аргументы в пользу того, что разрешающий API более надежен в prod, не подвергая бомбардировке другие приемлемые запросы. , Однако, поскольку мы контролируем все законные клиенты, похоже, что в этой ситуации мы не должны оказываться, за исключением некоторых редких случаев выпуска клиентов, которые используют некоторые поля, прежде чем API будет готов их использовать. Поэтому, если мы начнем видеть неожиданные поля, мы, по крайней мере, захотим знать и, скорее всего, ошибемся большую часть времени. Есть ли общий случай, когда мне не хватает того, где нас будет тормозить ограничительный API.

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

1 Ответ

0 голосов
/ 14 января 2019

Всегда лучше ограничить (или) контролировать данные, поступающие в ваше приложение. Это очень помогает избежать неожиданных ошибок. Между тем, существует множество уязвимостей, которые могут возникнуть из-за отсутствия надлежащей фильтрации входных данных как на стороне клиента, так и на стороне сервера. Вот некоторые разрушительные проблемы безопасности (но их легко использовать),

  • XSS - безопасность на стороне клиента, которая очень уязвима (даже захват учетной записи)
  • SQL-инъекция (массовое извлечение информации из БД, порча БД)

См. OWASP топ 10 вопросов безопасности.

Если вы хотите, чтобы некоторые из ваших API поддерживали непредвиденные данные, убедитесь, что вы приняли необходимые меры безопасности для обеспечения безопасности своего приложения. Например, правильное кодирование вывода в клиентах на основе браузера, экранирование подстановочных знаков перед выполнением запроса к БД с использованием ввода пользователя и т. Д.

...