Ограничение количества post запросов

212
24 февраля 2017, 02:09

Добрый вечер. Столкнулся с проблемой, имею сайт, на котором по кнопке выполняется покупка цифрового товара. Клик по кнопке отправляет post запрос на сервер, обрабатывает данные, отнимает баланс и выдает цифровой товар.

Сегодня нас взломали, отправив 25 команд на сервер за 2 секунды, по всей видимости сервер не до конца справился и баланс пользователю отнял в 10 раз меньше (Стоимость 1 товара 35 рублей, баланс у пользователя был 800, он купил 25 товаров, но баланс стал 700), я повторил его действия, используя консоль хрома отправил 20 копий команды $.post и результат был тот же, товары выдались, но баланс уменьшился лишь на 1/10 от необходимого

Вопрос такой, как можно ограничить количество запрос к 1 url от 1 пользователя скажем на 1 запрос в 2 секунды на стороне сервера? или может есть другие варианты решения проблемы?

Answer 1

Нужно завернуть критическую секцию в транзакцию.
Тогда операции снятия средств и регистрация факта выдачи товара либо будут выполнены полностью, либо не будут выполнены вовсе.

Также имеет смысл блокировать выбранные строки методом lockForUpdate, чтобы попытка конкурентного обновления вызывала не перезапись, а выбрасывала исключение(с последующим откатом транзакции).
В отличие от sharedLock этот метод также блокирует чтение строк в других транзакциях.

    DB::beginTransaction(); 
    try{  
        $user = App\User::where('id',auth()->id())->lockForUpdate()->get()->first()
        //делаем дела....
        $user->save(); 
        DB::commit(); 
    } catch(\Exception $e) { 
    DB::rollback(); 
       return $e; 
    }
READ ALSO
GET/POST запрос в JSON (jQuery)

GET/POST запрос в JSON (jQuery)

Не могу сообразить

387
Получить значения из json

Получить значения из json

Есть обработчик

255
Превью показывается не так как надо

Превью показывается не так как надо

Здравствуйте есть код превью изображений на сайт и проблема в том что кода другое изображение добавляю то оно грузится не там где надо и с повтором...

287
Помогите разобраться с селекторами css

Помогите разобраться с селекторами css

Как например задать класс второму по счету div, или задать только первому нужные стили, если у каждого однаковые названия классов? Немного...

229