@vnem
Веб разработчик | Front End | Back End

Как скрыть msorder на странице msGetOrder?

Здравствуйте!

Вот такая ситуация: разрабатываю интернет-магазин, с modx и minishop`ом еще на "Вы". Столкнулся с тем, что после того, как пользователь жмякает на кнопку оформления заказа, его перекидывает на страницу msGetOrder (логично), в адресной строке передается get параметр "msorder". Из-за этого появляется небольшая уязвимость :D тк. кто-то может изменить id и посмотреть, что другие заказывали, а это, мне что-то подсказывает, неправильно)
5ed9742129181608288277.png

Как можно решить это? Возможно, как-то скрыть или закодировать id? В настройках minishop`а рылся, но ничего н нашел, что-то упустил?

В целом, возможно есть другие пути решения этого?

Благодарю заранее каждого, как минимум за то, что прочитал мою писанину до конца :D
  • Вопрос задан
  • 433 просмотра
Решения вопроса 1
@Shwaber
Тоже столкнулся с данной проблемой и не нашел решение на просторах интернета.
Удалось решить проблему с помощью сниппета.
$mainPage = $modx->makeUrl(1);
$resource = $modx->resource;
$orderPage = $modx->makeUrl($resource->get('id')) . $get;
switch ($step) {
    case "clear":
        setcookie ("myOrder", "");
        break;
    case "check":
        if(!isset($_COOKIE["myOrder"])){
            setcookie ("myOrder", $value);
            $modx->sendRedirect($orderPage,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
        }
        if($_COOKIE["myOrder"] != $value){
            $modx->sendRedirect($mainPage,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
        }
        break;
}

Вставил в tpl msOrder (с режимом "clear") и в tpl msGetOrder (с режимом "check").
&step - режим работы
&value - что писать в cookie / с чем сравнивать (генерируем маску с использованием данных заказа, например, {$order.id}{$order.num}%{$order.cost})
&get - GET параметр заказа (?msorder={$order.id})

Логика работы:
1. На странице оформления заказа чистим печеньки myOrder.
2. На странице благодарности проверяем нет ли чего в печеньках. Если печеньки myOrder пусты, то записываем в них наше секретное значение. Если не пусты - сравниваем и либо оставляем пользователя на странице, либо перенаправляем на главную.

Может решение и костыльное, но самое главное, что работает. Другое в голову пока не пришло.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ig0r74
@ig0r74
MODX-разработчик
Посмотреть, что заказывали другие не получится. Попробуйте открыть в режиме инкогнито.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы