Безопасна ли эта настройка Paypal? - PullRequest
3 голосов
/ 24 сентября 2010

Я просто хотел проверить это другими головами, чтобы убедиться, что я не пропустил что-то очевидное.Я использую Payflow Link, которая обрабатывает все гадости кредитных карт транзакций электронной торговли.Однако вы передаете общую сумму транзакции в PayPal через переменные POST - что выглядит как потенциальная дыра в безопасности:

  1. Злоумышленник может загрузить свою корзину и перейти к оформлению заказа
  2. Читая скрытые поля ввода, он мог подделать POST для PayPal с общей суммой в 1 цент.
  3. Paypal выполнит транзакцию, вызовет мой сценарий регистрации заказов, который запишет транзакцию и пометит его товары для отправки.

Я могу проверить общую сумму по его корзине, получив доступ кбазы данных, вытаскивая свои товары из корзины, и пересчитывая их цены плюс стоимость доставки и налоги.Но это очень трудоемкий процесс, чтобы проверить на фальсификацию (несколько запросов к БД, плюс 2 вызова веб-службы на элемент для получения доставки и налога).

Моя идея:

  1. PayPal отправляется обычные переменные POST на сумму
  2. Но затем в определяемых пользователем переменных (которые перенаправляются в мой скрипт ведения журнала) сохраните хэш sha1 общей суммы плюс некоторый закрытый ключ
  3. С другой стороны, сценарий регистрации повторно вычисляет сумму в долларах плюс тот же закрытый ключ и сравнивает с хешем, отправленным через.
  4. Различия между отправленным хешем и вычисленным хешем указывают на фальсификацию, азаказ будет помечен для проверки человеком.

Имеет ли это смысл?Я что-то упустил?

edit (для пояснения):

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

Может ли кто-нибудь продемонстрировать одну уязвимость с моим предложением, которая позволит злоумышленнику изменять переменные PayPal и оставаться незамеченным?

Это очень простой вопрос.Это все, что я ищу.Всем, кто может ответить на этот вопрос, заранее благодарю за потраченное время и помощь!

Ответы [ 5 ]

3 голосов
/ 02 ноября 2012

Я опоздал на два года, но могу согласиться с оригинальным подходом автора.Мне недавно пришлось сделать то же самое с PayFlow Link.Что я сделал, так это сгенерировал хеш на основе идентификатора пользователя, общей суммы заказа и того, что они купили (корзина), и передал это в одном из полей пользователя PayFlow Link.Я также передал в другое поле случайную соль, используемую при создании этого хэша.На заднем торце был еще один общий ключ в коде, который пользователь никогда не увидит.Итак, подведем итог ...

hash = (user ID) + (order total) + (cart details) + (random salt) + (shared key)

С другой стороны, я снова генерирую хэш, используя те же входные данные, которые я собираю из Paypal, которые они обработали.Хэши должны совпадать, если ничего не было подделано.

Этот подход работает безупречно, если настроен правильно.Ключ здесь - это общий ключ в коде, который пользователь никогда не увидит, и использующий случайную соль, поэтому даже при идентичных покупках хеш-коды различаются, даже при идентичных покупках.!

2 голосов
/ 05 октября 2010

Одна потенциальная проблема, которую я вижу, это использование одной и той же соли каждый раз при генерации хеша SHA-1. Если вы используете одну и ту же соль каждый раз, злоумышленник может очень легко определить хеш для 0,99 доллара (или другой небольшой суммы), а затем заменить его на любую транзакцию, за которую он хочет заплатить 0,99 доллара.

Редактировать: Очевидно, что эта проблема справедлива, если вы придумаете какой-то алгоритм для определения соли. Если этот алгоритм каким-то образом нарушен, ваш злоумышленник также может воспользоваться этим.

2 голосов
/ 24 сентября 2010

После IPN необходимо выполнить ручную проверку рассчитанной суммы с использованием данных вашей БД, а затем проверить ее с помощью суммы, уплаченной в PayPal.Другого варианта на самом деле нет, и я настоятельно рекомендую вам сделать это, иначе пользователи попытаются сыграть в систему.

Вы можете использовать это руководство для шифрования переменных PayPal:

http://dev.juokaz.com/php/paypal-payment-with-encryption

0 голосов
/ 02 ноября 2012

Было проведено исследование на эту тему. http://www.utdallas.edu/~zhiqiang.lin/spring2012/lec11.pdf. По сути, вы правы, эти услуги кассира уязвимы и могут привести к потере дохода от вашего магазина электронной коммерции.

Ваша идея хеширования сработает, однако я бы добавил туда временную метку, чтобы она изменилась, и вы могли убедиться, что время ожидания не истекло. Без каких-либо изменений пользователь может, например, поместить в свою корзину действительно дешевый товар, получить хэш sha1 и воспроизвести его после того, как он положил дорогой товар в свою корзину.

0 голосов
/ 04 октября 2010

Я видел такой взлом своими глазами.Какой-то чувак купил подарочную карту за 500 долларов примерно за 1 доллар.Мы быстро добавили код, который сравнивает итоговые суммы заказа из IPN с нашими собственными данными и помечает заказ как подозрительный, если они не совпадают.

В описании ссылки на Payflow говорится: «Вы решаете, проводить ли транзакцию или нет».Поэтому вы должны каждый раз проверять правильность суммы.

...