Передача данных form input type hidden

Orwall

PHP for u
Всем доброго времени суток!
Столкнулся с проблемой, решить не могу. Надеюсь, направите меня в верное русло.

Пытаюсь добавить форму оплаты веб мани. Форма выглядит совершенно обычно:
PHP:
<?php echo "
                                    
<form action='https://merchant.webmoney.ru/lmi/payment.asp?at=authtype_16' method='POST'>
<input type='text' name='LMI_PAYMENT_AMOUNT' value='110' class='form-control'><br>
<input type='hidden' name='id' value='$id'>
<input type='hidden' name='from' value='$names'>
<input type='hidden' name='LMI_PAYMENT_DESC_BASE64' value='0J/QvtC/0L7Qu9C90LXQvdC40LUg0YHRh9C10YLQsA=='>
<input type='hidden' name='LMI_PAYEE_PURSE' value='RXXXXXXXX'>
<button type='submit' name='send' class='btn btn-primary mx-auto d-block'>Помочь!</button>
</form>";?>
Далее данная форма обрабатывается таким образом:

PHP:
if ($_POST['LMI_PREREQUEST'] == 1) {
if ($_POST['LMI_PAYEE_PURSE'] == 'RХХХХХХХХ') echo 'YES';
} else {
$key = $_POST['LMI_PAYEE_PURSE'].$_POST['LMI_PAYMENT_AMOUNT'].$_POST['LMI_PAYMENT_NO'].$_POST['LMI_MODE'].$_POST['LMI_SYS_INVS_NO'].$_POST['LMI_SYS_TRANS_NO'].$_POST['LMI_SYS_TRANS_DATE'].'ХХХХХХ'.$_POST['LMI_PAYER_PURSE'].$_POST['LMI_PAYER_WM'];   
if (strtoupper(hash('sha256', $key)) != $_POST['LMI_HASH']) exit;

$ID = trim($_POST['id']);   
$Row = mysqli_fetch_assoc($mysqli->query("SELECT login FROM users WHERE id = $ID"));

if ($Row['login'])
    $mysqli->query("INSERT INTO payment VALUES('', '$Row[login]', $_POST[LMI_PAYMENT_AMOUNT], '$_POST[names]', '$_POST[date]')");
В БД заносится информация по $names

Проблема в том, что пользователь может отредактировать значение переменной $names через среду разработчика и эта измененное значение передается в БД.

Проверка не проходит по сессиям, куки , так как проверка идет со стороны мерчанта веб мани. А они не могут знать, какое значение верное.

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

Orwall

PHP for u
а зачем он будет это делать?
Да, я тоже задаюсь этим вопросом. Зачем ему это надо будет. Но, аля школьники: - смотрите, я взломал сайт....
Мне до продакшена надо защитить как-то данный момент, так как, если будет изменена переменная, в бд записывается не то значение, соответственно в дальнейшем и будет выводиться не та информация. А, кстати, я к БД потом обращаюсь, чтобы получить эти переменные...
 

weregod

unserializer
тс, если будут ломать, в $_POST['id'] засунут каку снаружи, а не эти ваши $names изнутри
 

ksnk

прохожий
Вопрос. Эта форма оплаты - она где находится ? На твоем сайте, куда клиент логинится естественным образом, или на сторонних площадках ?
 

Orwall

PHP for u
тс, если будут ломать, в $_POST['id'] засунут каку снаружи, а не эти ваши $names изнутри
И это в том числе! Главное понять как избежать краха вселенной :)
Вопрос. Эта форма оплаты - она где находится ? На твоем сайте, куда клиент логинится естественным образом, или на сторонних площадках ?
Находится на моем сайте. Пообщался с Веб мани, те говорят, что сначала в бой выходит их обработчик, а далее уже мои записи. С их слов, они не знают, какая переменная может быть передана и верная ли она. Поэтому они предложили сделать такой вариант :
"Лучше на Вашей стороне работать с параметрами LMI_PAYMENT_NO, сделать его уникальным и хранить реляцию между LMI_PAYMENT_NO и другими параметрами, которые Вам нужны.
После получения формы оповещения о платеже, Вы сможете в БД найти нужные Вам параметры по уникальному LMI_PAYMENT_NO и выполнить необходимые Вам действия". -

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

Или я не понимаю чего они имели ввиду
 
Последнее редактирование:

Orwall

PHP for u
Коллеги, с помощью одного человека, удалось решить проблему следующим образом. (Может кому будет полезна информация)
Есть форма, которая пост отправляет не МЕРЧАНТУ, а мне., где есть все эти переменные.
После того как юзер отправит форму мне, я ее проверяю на соответствие. Если проверка проходит, делаешь header(Location: /страница загрузки платежа), на этой страницы делаешь форму для мерчанта со скрытыми полями. Далее с помощью js отправляешь эту форму мерчанту. И - кайф !
Всем спасибо за уделенное время!
 

Фанат

oncle terrible
Команда форума
всё еще остается вопрос зачем.
Кнопка, как я понимаю, всего лишь просьба о подаянии.
то есть всё что можно с ней сделать - это отправить подаяние не тому или не на ту сумму.
и в чем тут проблема-то?
 

Orwall

PHP for u
Ээээ... а ушлый юзер в этот момент не может остановить выполнение js и поменять данные ?
А как он сможет остановить выполнение js?
всё еще остается вопрос зачем.
Кнопка, как я понимаю, всего лишь просьба о подаянии.
то есть всё что можно с ней сделать - это отправить подаяние не тому или не на ту сумму.
и в чем тут проблема-то?
А после отправки подаяния не тому и не на ту сумму, тот, которому должны были отправить подаяние - и не узнает, что ему кто-то собирался отправлять, пока к концу месяца не начнешь делать сверку поступлений.
 

Фанат

oncle terrible
Команда форума
Ну и что?
Какая разница-то?
Если хотят ему отправить - отправят.
Если не хотят - не отправят или отправят не ему. Без всяких плясок с бубном вокруг формы.

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

Вурдалак

Продвинутый новичок
Ну и что?
Какая разница-то?
Если хотят ему отправить - отправят.
Если не хотят - не отправят или отправят не ему. Без всяких плясок с бубном вокруг формы.

иногда я вообще не понимаю, как работает голова у меллинниалов воспитанных ютубочкой.
Похоже, что когда информация воспринимается исключительно через рот, то критическое мышление атрофируется
OK, boomer
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну и что?
Какая разница-то?
Если хотят ему отправить - отправят.
Если не хотят - не отправят или отправят не ему. Без всяких плясок с бубном вокруг формы.

иногда я вообще не понимаю, как работает голова у меллинниалов воспитанных ютубочкой.
Похоже, что когда информация воспринимается исключительно через рот, то критическое мышление атрофируется
Устроил тут Баевщину, понимаешь!
 
Сверху