Требования к backend

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

Обратите внимание, что прохождение проверки безопасности и тестпула не гарантирует 100% гарантии отсутствия уязвимостей и недоработок. Не в обиду тестерам и модераторам вк. Прохождение модерации и тестпула на мой взгляд обычная формальность, и только вы заинтересованы в стабильности и надёжности сервиса. Что в модерации, что в тестпуле сидят явно не люди с высшим образованием по информационной безопасности. Куча сервисов выходит в каталог с дырами в безопасности.

1. Если на фронте есть ограничение по вводимым данным или размерам изображений, то и со стороны backend должны быть ровно такие же проверки (пользователь может перехватить запрос к api и отправить любые данные). 2. Вы должны делать все возможные проверки для того, чтобы исключить код 5хх. Код 5хх это ошибка сервера, а у нашей лучшей api не должно быть ошибок! 3. Тщательно прорабатывайте все контроллеры и промежуточное ПО, каждая недоработка может стать серьезной уязвимостью. 4. Флуд контроль очень важен, тем более, к примеру, при загрузке данных на сервер. Я лично сталкивался с тем, что пользователь может отправить 100 одинаковых фото к вам на сервис. Для устранения подобных ситуаций стоит делать Флуд контроль на большой промежуток времени (пример: 10 запросов в час) или сделать свой алгоритм определения флуда. К примеру, считывание md5 фото и сравнение его с другими md5 фото. Если они одинаковые, то давать предупреждение пользователю и прекращать загрузку. 5. Нужно проверять медиаданные на лишние байты. К примеру imagemagick имеет серьёзные уязвимости, которые позволяют в изображение внедрять код, создающий уязвимость в вашем сервисе. Я использую Sharp.js для обработки медиаданных от пользователя и попытки отправить битые и прочие файлы проходят неуспешно. 6. Исключения могут появляться и вне вашего кода. Тогда Fastify, на котором мы пишем api, будет отправлять в ответ всё тот же 5xx. Для того, чтобы к этому не придрались, используйте переназначение ошибки:

fastify.setErrorHandler(function (error, request, reply) {
    return fastify.response.All(418, { message: "418 you a teapot" }, reply);
})

Last updated

Was this helpful?