Добавить возможность пагинации при передаче данных о заказе
При передачи ответа на запрос о заявках за месяц http://example.com/integration.php?date=1453836403&user=vasya&token=d41d8cd98f00b204e9800998ecf8427e&action=export , количество отдаваемых данных может превышать 100 000 заказов. в таком случае, на один запрос может отправлятся слишком большой масив данных (больше 10 мб), что вызовет уязвимость для злоумышлеников. зная адрес, который отдает такой объем данных в обном ответе, можно отправить большое количество запросов в один момент времени, и таким образом забить полностью каналы сервера.
Для привентирования подобных ситуаций существет следующее решение:
разбивать ответ на страницы, в каждой из которых есть максимальное кол-во записей. По стандартам REST сервисов, кол-во страниц всего, кол-во элементов на странице и текущая страница передается в заголовках ответа (Headers), а необходимая страница передается с помощью get параметра page.
Answer
А учитываете ли вы, что в запросе данных указана дата в параметре date? То есть выдавать надо не все заказы, а только те, которые были изменены после указанной даты. Обычно информация запрашивается за 2 последних дня, то есть кол-во записей небольшое.
"Обычно" не внушает уверености. При желании(если цель не получать данные, а принести вред сайту), можно передать любую дату. Даже если ограничить возможность выгрузки до 2-х месяцев(Максимальный период, как говорил Ваш менеджер), то объем данных достаточно большой.
При всем этом, щлоумышленик может сам наделать кучу заказов с помощью самого простого скрипта, или тулы, за один день, за тем отправить запросы на выгрузку всех заказов за сегодня/вчера.
Достаточно простой сценарий вывода из работы сервера, поэтому лучше такую возможность учитывать
Разумеется ваше предложение вполне разумно и стоит добавить пагинацию.
Но все же запрос защищен токеном, который злоумышленник узнать не может. То есть как нам кажется приоритет у данной проблемы невысокий. Или мы чего-то не учитываем?
У нас достаточно большая партнерская программа, в которой может зарегистрироваться практически каждый. Любой партнер может получить токен, и интегрироваться в систему роистат под своим аккаунтом. Дальше можно сделать то, что я написал ранее.
Ну и вообще это немного не по стандарту.
Сергей, каким образом партнер может получить доступ к токену в вашему проекте Roistat? Они имеют доступ к этому проекту на Чтение / Запись?
Партнер - человек, который имеет СВОЙ магазин в нашей системе.
Каждый партнер может делать со своим магазином что угодно, в том числе интегрироваться в роситат. Мы сделаем возможность интеграции магазинов партнеров с системой роистат.
Получается, что партнер будет флудить свой магазин, но так как он в общей системе(на наших серверах), то ущерб понесет система в целом, а не партнер.
Готово.
Обновилась статья про интеграцию со своей CRM: http://help.roistat.com/pages/viewpage.action?pageId=360599
Если в двух словах, то в выгрузку данных вам нужно добавить массив:
"pagination"
: {
"total_count"
: 1344,
"limit"
: 200
}
В котором нужно указать общее количество заказов на странице и лимит заказов, который выводится на страницу. После этого Roistat будет получать информацию о заказах постранично.
Customer support service by UserEcho
Готово.
Обновилась статья про интеграцию со своей CRM: http://help.roistat.com/pages/viewpage.action?pageId=360599
Если в двух словах, то в выгрузку данных вам нужно добавить массив:
"pagination"
: {
"total_count"
: 1344,
"limit"
: 200
}
В котором нужно указать общее количество заказов на странице и лимит заказов, который выводится на страницу. После этого Roistat будет получать информацию о заказах постранично.