Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Переопределяемая переменная в hidden


Recommended Posts

Доброе время суток, есть форма:

<form id="appointment-form" class="mt-3">
    <input type="hidden" name="product_id" value="<?php echo $product_id; ?>">
    <button id="appointment-send" type="button" class="btn btn-primary btn-lg " onclick="appointment_send()">
      <?php echo $button_submit; ?>
    </button>   
  </form>

 

и скрипт который отправляет форму для валидации на сервер:

function appointment_send() {    
    $.ajax({
     url: 'index.php?route=appointment/item_appointment/add',
                type: 'post',
                data: $('#appointment-form').serialize(),
                dataType: 'json',
                success: function(json) {
                },
                }
  });
}

 

Все хорошо работает кроме того, что любой пользователь в форме может изменить значение скрытого инпута product_id и он отправиться на сервер в измененном виде, вопрос как исключить возможность редактирование скрытого поля пользователями сайта?

 
Надіслати
Поділитися на інших сайтах

Лично мне кажется какой бы Вы велосипед не придумали данная возможность будет всегда. По сути валидация и так проходит при добавлении товара в корзину. Даже если этот факт попробовать "замаскировать" то кто захочет разберется. а так хоть в тот же base64 загоняйте или добавьте доп идентификаторы

типа <?php echo base64_encode($secret_one.$product_id.$secret_two); ?>

Ну или добавлять индивидуальный идентификатор в виде реферера или еще чего

 

Просто значение Вы можете поменять и в самом опенкарте прямо на форме добавления в корзину. К чему такая крайность не особо понятно.Если конечно форма не уходит полностью на свой обработчик который не использует штатный код опенкарта

Змінено користувачем worldtour
Надіслати
Поділитися на інших сайтах

Правило простое - то, что не должно меняться клиентом, не должно вообще фигурировать на фронте.

Если надо, чтобы нельзя было заменить ID, то его и в данные формы нельзя помещать.

Сохраняйте его в сессии и потом доставайте, когда требуется.

Надіслати
Поділитися на інших сайтах

Просто странно все получается, форма в попапе, т.есть при открытии формы я уже валидирую item_id и нужно опять отправлять его же в другую функцию контроллера для валидации 

6 часов назад, mpn2005 сказал:

Правило простое - то, что не должно меняться клиентом, не должно вообще фигурировать на фронте.

Если надо, чтобы нельзя было заменить ID, то его и в данные формы нельзя помещать.

Сохраняйте его в сессии и потом доставайте, когда требуется.

 

Надіслати
Поділитися на інших сайтах

16 hours ago, zomo said:

Все хорошо работает кроме того, что любой пользователь в форме может изменить значение скрытого инпута product_id и он отправиться на сервер в измененном виде, вопрос как исключить возможность редактирование скрытого поля пользователями сайта?

 

Ситуация следующая: кто угодно (не только пользователи, но и бот) может отправить что угодно (любые переменные) куда угодно (даже если контроллер нигде не фигурирует во фронте) любое количество раз. Поэтому всегда нужно делать валидацию типов переменны, валидацию прав доступа и защиту от инъекций в бэкэнде. Весь функционал фронта существует только для удобства пользователя (в том числе и валидация в фронте нужна только для удобства пользователя). Это общая теория \ дисклеймер.

 

Если очень хочется, чтобы пользователь не мог подменить значение в форме, то добавьте хэш-сумму с солью. Условно:

1) Добавить в форму:

<input type="hidden" name="_h" value="<?php echo md5($product_id.'my_secret_word'); ?>">

2) Добавить в контроллер:

<?php 

$product_id = intval($_POST['product_id']);

if (!$product_id || empty($_POST['_h']) || $_POST['_h'] != md5($product_id.'my_secret_word')) {
	die('Invalid input params');
}

Таким образом каждому product_id соответствует уникальный хеш, который пользователь не может сгенерировать сам без взлома md5.

  • +1 1
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.