Я просто хотел проверить это другими головами, чтобы убедиться, что я не пропустил что-то очевидное.Я использую Payflow Link, которая обрабатывает все гадости кредитных карт транзакций электронной торговли.Однако вы передаете общую сумму транзакции в PayPal через переменные POST - что выглядит как потенциальная дыра в безопасности:
- Злоумышленник может загрузить свою корзину и перейти к оформлению заказа
- Читая скрытые поля ввода, он мог подделать POST для PayPal с общей суммой в 1 цент.
- Paypal выполнит транзакцию, вызовет мой сценарий регистрации заказов, который запишет транзакцию и пометит его товары для отправки.
Я могу проверить общую сумму по его корзине, получив доступ кбазы данных, вытаскивая свои товары из корзины, и пересчитывая их цены плюс стоимость доставки и налоги.Но это очень трудоемкий процесс, чтобы проверить на фальсификацию (несколько запросов к БД, плюс 2 вызова веб-службы на элемент для получения доставки и налога).
Моя идея:
- PayPal отправляется обычные переменные POST на сумму
- Но затем в определяемых пользователем переменных (которые перенаправляются в мой скрипт ведения журнала) сохраните хэш sha1 общей суммы плюс некоторый закрытый ключ
- С другой стороны, сценарий регистрации повторно вычисляет сумму в долларах плюс тот же закрытый ключ и сравнивает с хешем, отправленным через.
- Различия между отправленным хешем и вычисленным хешем указывают на фальсификацию, азаказ будет помечен для проверки человеком.
Имеет ли это смысл?Я что-то упустил?
edit (для пояснения):
Очевидно, я не разъяснил свою точку зрения, основываясь на первых нескольких ответах.Я понимаю, что это не идеальная установка.Я знаю, что другие компании предлагают аналогичные или, возможно, даже лучшие услуги.Я знаю, что должен проверить переменные, и я не могу просто доверять им.Пожалуйста, если вы собираетесь ответить, все, что я ищу в ответе, это:
Может ли кто-нибудь продемонстрировать одну уязвимость с моим предложением, которая позволит злоумышленнику изменять переменные PayPal и оставаться незамеченным?
Это очень простой вопрос.Это все, что я ищу.Всем, кто может ответить на этот вопрос, заранее благодарю за потраченное время и помощь!