0
Completed

Добавить возможность пагинации при передаче данных о заказе

Sergey Gera 9 years ago updated by Максим 9 years ago 8

При передачи ответа на запрос о заявках за месяц http://example.com/integration.php?date=1453836403&user=vasya&token=d41d8cd98f00b204e9800998ecf8427e&action=export , количество отдаваемых данных может превышать 100 000 заказов. в таком случае, на один запрос может отправлятся слишком большой масив данных (больше 10 мб), что вызовет уязвимость для злоумышлеников. зная адрес, который отдает такой объем данных в обном ответе, можно отправить большое количество запросов в один момент времени, и таким образом забить полностью каналы сервера.


Для привентирования подобных ситуаций существет следующее решение:

разбивать ответ на страницы, в каждой из которых есть максимальное кол-во записей. По стандартам REST сервисов, кол-во страниц всего, кол-во элементов на странице и текущая страница передается в заголовках ответа (Headers), а необходимая страница передается с помощью get параметра page.

Интеграции

Answer

Answer
Completed

Готово.

Обновилась статья про интеграцию со своей CRM: http://help.roistat.com/pages/viewpage.action?pageId=360599


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

"pagination": {

"total_count": 1344,

"limit": 200

}


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

А учитываете ли вы, что в запросе данных указана дата в параметре date? То есть выдавать надо не все заказы, а только те, которые были изменены после указанной даты. Обычно информация запрашивается за 2 последних дня, то есть кол-во записей небольшое.

"Обычно" не внушает уверености. При желании(если цель не получать данные, а принести вред сайту), можно передать любую дату. Даже если ограничить возможность выгрузки до 2-х месяцев(Максимальный период, как говорил Ваш менеджер), то объем данных достаточно большой.


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


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

Разумеется ваше предложение вполне разумно и стоит добавить пагинацию.


Но все же запрос защищен токеном, который злоумышленник узнать не может. То есть как нам кажется приоритет у данной проблемы невысокий. Или мы чего-то не учитываем?

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

Under review

Сергей, каким образом партнер может получить доступ к токену в вашему проекте Roistat? Они имеют доступ к этому проекту на Чтение / Запись?

Партнер - человек, который имеет СВОЙ магазин в нашей системе.

Каждый партнер может делать со своим магазином что угодно, в том числе интегрироваться в роситат. Мы сделаем возможность интеграции магазинов партнеров с системой роистат.

Получается, что партнер будет флудить свой магазин, но так как он в общей системе(на наших серверах), то ущерб понесет система в целом, а не партнер.

Answer
Completed

Готово.

Обновилась статья про интеграцию со своей CRM: http://help.roistat.com/pages/viewpage.action?pageId=360599


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

"pagination": {

"total_count": 1344,

"limit": 200

}


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