Всё обо всём

Двойные транзакции

404 250
user avatar
Администратор
На сайте 15 лет
Сообщений : 276
Репутация : 120
9 лет назад
Всем привет, нужен совет бывалых,
Как Вы защищаетесь от двойных транзакций! То есть пользователь может отправить одну форму в одно и тоже время, но с баланса спишется к примеру одна сумма!

Пример:
У юзера на балансе 1 руб, он отправляет второму юзеру этот рубль, но нажав одновременно два раза на кнопку, с него спишется 1 руб, а второму юзеру зачислится два рубля,

Вот и сам вопрос как можно от этого защитится?

За ранее спасибо!
user avatar
Пользователь
На сайте 13 лет
Сообщений : 251
Репутация : 0
9 лет назад
Цитата: ra4ok14а второму юзеру зачислится два рубля
Оооо это плохо, самому интересно!
user avatar
Пользователь
На сайте 13 лет
Сообщений : 1859
Репутация : 0
9 лет назад
ra4ok14,
так не бывает, одновремено не отсылается ничего, разница есть хоть и в милисекундах. Но ищи дыру.
user avatar
Администратор
На сайте 15 лет
Сообщений : 276
Репутация : 120
9 лет назад
Pretorian,
По логам и транзакциям видно, что два одновременных запроса! Я не утверждаю что это сделано в ручную, скорее всего бот.
Но факт остается тем что именно одновременные транзакции!
user avatar
Пользователь
На сайте 11 лет
Сообщений : 745
Репутация : 0
9 лет назад
А некоторые вообще не парятся по этому поводу :wink: На 1 сервисе закинул 100 р изначально а пришло 200 :wink:
user avatar
Пользователь
На сайте 13 лет
Сообщений : 1859
Репутация : 0
9 лет назад
ra4ok14,
может у тебя проверка на баланс не коректная, тоесть она срабатывает до того как срабатывает второй запрос. Хз тут много может быть теорий, но это может быть обманка. Он может накручивать на чем то другом, а это в логи писать для ввода тебя в заблуждение. обясни подробней с какого на какой баланс он делает перевод, куда и кому зачисляется и дублируется и что это за функция

Цитата: trolleybusА некоторые вообще не парятся по этому поводу :wink: На 1 сервисе закинул 100 р изначально а пришло 200 :wink:
может там акция на пополнение ))) новости читал?
user avatar
Администратор
На сайте 15 лет
Сообщений : 276
Репутация : 120
9 лет назад
Pretorian,
Смысл такой!
Есть модуль перевода средств между юзерами! Есть минимальная сумма перевода(проверка стоит), Есть проверка на доступный баланс и достатка средств на счете!
Юзер вписывает в форме ИД второго юзера которому он хочет передать деньгу, и сумму, потом идет проверка на минималку, потом проверка на достаток средств на балансе, так же присутствует проверка на существование юзера! После всего этого если все нормально, то происходит сначала списание средств с юзера_1, потом зачисление юзеру_2! Следом идет запись в логи что был перевод от юзера_1 к юзеру_2 на такую сумму, и собственно дата в Unix формате!

Таких логов сотни, разница между парами логов 1-2 сек, каждая пара логов(тоесть за каждый перевод 2 лога) имеет одну и туже дату в точности до секунды
user avatar
Пользователь
На сайте 13 лет
Сообщений : 1859
Репутация : 0
9 лет назад
ra4ok14,
надо код смотреть

а не тот ли это плагин перевода денег между юзерами для буксов поколения эдита что им барижили ???
user avatar
Пользователь
На сайте 11 лет
Сообщений : 745
Репутация : 0
9 лет назад
Цитата: Pretorianможет там акция на пополнение ))) новости читал?
Щас проверил , нету подобных новостей. Но довольно странная штука с пополнением для сервиса регистраций доменов ))))
user avatar
Администратор
На сайте 15 лет
Сообщений : 276
Репутация : 120
9 лет назад
Pretorian,
Нет это писал я сам!
Вот метод класса отвечающий за это
http://pastebin.com/c3hgnMMr

А вот и сам метод модели
http://pastebin.com/PeUN1QMF
user avatar
Пользователь
На сайте 13 лет
Сообщений : 317
Репутация : 0
9 лет назад
Цитата: Pretorianтак не бывает, одновремено не отсылается ничего, разница есть хоть и в милисекундах. Но ищи дыру.
Бред

Цитата: ra4ok14Есть модуль перевода средств между юзерами! Есть минимальная сумма перевода(проверка стоит), Есть проверка на доступный баланс и достатка средств на счете!
Юзер вписывает в форме ИД второго юзера которому он хочет передать деньгу, и сумму, потом идет проверка на минималку, потом проверка на достаток средств на балансе, так же присутствует проверка на существование юзера! После всего этого если все нормально, то происходит сначала списание средств с юзера_1, потом зачисление юзеру_2! Следом идет запись в логи что был перевод от юзера_1 к юзеру_2 на такую сумму, и собственно дата в Unix формате!

Таких логов сотни, разница между парами логов 1-2 сек, каждая пара логов(тоесть за каждый перевод 2 лога) имеет одну и туже дату в точности до секунды


Ну как вариант 800 рублей и всё разрулю.

Ну или тупо глянь api, которое я тебе писал для платёжной системы. Там была защита, ЕМНИП
user avatar
Администратор
На сайте 15 лет
Сообщений : 276
Репутация : 120
9 лет назад
Misha,
Все таки транзакции от этого спасают?
user avatar
Пользователь
На сайте 14 лет
Сообщений : 164
Репутация : 0
9 лет назад
Бред, код показывай, обычно проблема в том что со всех всё списывает...
user avatar
Пользователь
На сайте 13 лет
Сообщений : 1859
Репутация : 0
9 лет назад
и мне вот интересно
user avatar
Пользователь
На сайте 15 лет
Сообщений : 858
Репутация : 0
9 лет назад
Не, я конечно все понимаю, мега про фулл хацкеры и все такое, но читать весь бред бреда бредовый бред Ваш не могу :lol:
ra4ok14, просто после завершения функции поставь break or sleep
или если хочешь, то запиши в сессию, куки или еще куда uniq id и все
ну в общем решай сам

Как я вижу шоп тут по прежнему деградирует :lol:
user avatar
Пользователь
На сайте 13 лет
Сообщений : 317
Репутация : 0
9 лет назад
Цитата: ByFly просто после завершения функции поставь break or sleep
Ох, сверхинтеллект подъехал
user avatar
Пользователь
На сайте 14 лет
Сообщений : 287
Репутация : 0
9 лет назад
Цитата: ByFlyra4ok14, просто после завершения функции поставь break or sleep

:belay: но ведь у него же скорее всего проблема в том, что скрипт вызывается два раза, т.е данные отправляются не единожды, думаешь тоже поможет? :love: интересное решение да(сарказм) :what:
user avatar
Пользователь
На сайте 13 лет
Сообщений : 1859
Репутация : 0
9 лет назад
Цитата: ByFlysleep
если уж и ставить то наверное так sleep(1); не?
user avatar
Пользователь
На сайте 13 лет
Сообщений : 317
Репутация : 0
9 лет назад
Цитата: Pretorianесли уж и ставить то наверное так sleep(1); не?
Не, фигня всё.

Лучше вообще сделать вот так
while(true){}

Байфлаич вообще молодец, тут люди про транзации дрочили и прочую хуйню,а он пришёл и самое действенное решение показал. Вот так просто, без понтов и прочего. Уважение таким людям!
user avatar
Пользователь
На сайте 15 лет
Сообщений : 858
Репутация : 0
9 лет назад
Я все понимаю, OOP, Laravel, UI и прочее, вы в этом ох*енные дрочеры и тд и тп.
НО бл*дь, человек изобрел колесо, оно и в Африке колесо, оно будет круглым, тут та же фишка, думайте, ломайте головы, но ведь можно все просто сделать.

P.S. епт, создай куку, запиши туда IP и сделай проверку и всё

P.S.S. претор как всегда вы*бнулся, написав не название функции, а программный её вид :lol:

Цитата: Nikes но ведь у него же скорее всего проблема в том, что скрипт вызывается два раза, т.е данные отправляются не единожды, думаешь тоже поможет? интересное решение да(сарказм)

ипать ты остряк, ну и что, пусть вызывается хоть 100 раз, ему то что из этого?
Автор темы
author avatar
WmRush
Администратор
На сайте 15 лет
Сообщений 276
Тем 14
Репутация 120
Теги темы
Автор не добавил тегов для этой темы
Ответить
Написал(а):