У меня есть форма, где пользователи могут покупать кредиты с помощью PayPal или банковским переводом в качестве способа оплаты.
Если пользователь выбрал «PayPal» в качестве опции, данные формы будут отправлены в PayPal, используя JQuery / JS:
$(':radio').change(function () {
var $this = $(this).val();
if ($this === 'pp') {
$('#form').attr('action','https://www.paypal.com/cgi-bin/webscr');
}
else
{
$('#form').attr('action','');
}
});
Пользователь также может выбрать, сколько он хочет заплатить, а также выбрать, сколько кредитов он получит от этого. Дополнительно он может добавить код купона. Ajax-Request проверит нашу базу данных, если это действительный купон, и предоставит скидку.
Вся информация хранится в скрытых полях ввода (какая цена, сколько кредитов, какая скидка (если есть), идентификатор пользователя и т. Д.).
Теперь я хочу убедиться, что пользователь не манипулирует этими значениями с помощью Инструментов разработчика или подобных вещей, чтобы платить меньше, использует другой идентификатор пользователя и так далее.
Каков наилучший способ предотвратить манипуляции с этой формой и получить правильные данные? Я предполагаю, что это довольно сложно, потому что есть так много ценностей, которые нужно изменить.
Существует много гнусных способов отправки манипулированных или поддельных данных на веб-сервер — cURL, Http Client (приложение OSX), чтобы назвать два, которые я часто использую при отладке. Решительный злоумышленник отправит неверные данные на сервер HTTP независимо от того, какой Javascript вы придумали.
В целях безопасности пришло время отказаться от ментальной модели использования веб-браузера, потому что это веб-сайт. Как уже говорилось, существует много способов отправки данных на HTTP-сервер.
Javascript полезен для пользовательского интерфейса и помогает пользователю, но когда речь идет о защите вашего сервиса от намеренно плохих / неправильных / искаженных данных, вы должен сделать это на сервере.
Возможно, вам придется переосмыслить, используя скрытые поля формы. Одним из подходов будет использование сеансов для отслеживания этой информации. Если это информация, которую необходимо отправить в PayPal в форме, есть способ встроить форму PayPal используя зашифрованные данные.
Если вы не хотите этого делать, точка безопасности затем переходит к коду обработки заказа — посмотрите детали транзакции (сумма в валюте и т. Д.), Прежде чем считать, что транзакция завершена и действительна.
Других решений пока нет …