Jump to content

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 и он отправиться на сервер в измененном виде, вопрос как исключить возможность редактирование скрытого поля пользователями сайта?

 

Share this post


Link to post
Share on other sites
Posted (edited)

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

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

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

 

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

Edited by worldtour

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.