Как устранить сбой «Форма авторизации на странице оформления заказа не передала на сервер параметр «form_key»»

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Ольга Ивченко
  • Группа: Клиент
  • Сообщений: 6
  • Регистрация: 27.04.2015

05.05.2015 23:04

Пользователь пытался сформировать заказ. Пришло сообщение на e-mail:
Форма авторизации на странице оформления заказа не передала на сервер параметр «form_key».
Причиной дефекта формы может быть несовместимость используемой магазином оформительский темы, а также нестандартные правки в ней, сторонние модули, либо некий сбой в Российской сборке Magento.
Разработчик уже оповещён о проблеме.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8886
  • Регистрация: 20.02.2010

06.05.2015 06:52

Причиной невозможности покупателей авторизации в магазине из-за отсутствия в формах авторизации параметра «form_key» является несовместимость используемой магазином оформительский темы с используемой магазином версией Magento Community Edition.
Magento Community Edition, начиная с версии 1.8.1, при авторизации покупателей в магазине проверяет значение параметра «form_key».
Это делается с целью предотвращения несанкционированного доступа злоумышленников к учётной записи покупателей посредством атак типа Межсайтовая подделка запроса (Cross-site request forgery).
Типичный пример: когда злоумышленник присылает клиенту магазина ссылку, клиент переходит по ней, и таким образом злоумышленник от лица клиента и под его учётной записью что-то делает в интернет-магазине.
Может показаться, что злоумышленник с авторизационными правами клиента много сделать не может, однако некоторые установленные в магазине модули могут позволять клиентам делать многое (в частности, даже стандартная функциональность Magento позволяет клиенту привязывать к своей учётной записи счёт PayPal) и особенно такой метод атаки может быть полезен как часть более общей атаки, например, с использованием социальной инженерии: например, злоумышленник от лица покупателя делает заказ и в комментарии к заказу присылает какую-нибудь нехорошую ссылку неопытному менеджеру магазина, т.е. направляя атаку уже на взлом всего магазина.

В Magento Community Edition версий ниже 1.8.1 была такая уязвимость была устранена: к формам авторизации клиентов был добавлен параметр «form_key», который устраняет возможность описанных выше атак.
Однако если владелец интернет-магазина использует стороннюю оформительскую тему, выпущенную для более ранних версий Magento Community Edition (или устаревшую версию современной оформительской темы), то там параметра «form_key» не будет, и, соответственно, покупатели вообще не смогут авторизоваться в интернет-магазине.

Сама Magento Community Edition подобную проблему не решает никак. Она просто молча не даёт покупателям авторизоваться, попасть в свой личный кабинет, сделать заказ от лица ранее созданной учётной записи.
Российская сборка Magento идёт дальше: она сначала пытается устранить эту проблему самостоятельно: пытается добавить к формам авторизации параметр «form_key». Если структура сторонней оформительской темы совсем уж нестандартная, и в автоматическом режиме параметр «form_key» добавить нельзя, то Российская сборка Magento немедленно оповещает об этом администратора магазина сообщением, указанным в заголовке данной темы: Форма авторизации на странице оформления заказа не передала на сервер параметр «form_key».

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

Чтобы починить оформительскую тему самостоятельно, надо:
  • Найти в своей оформительской теме следующие файлы:
    template/customer/form/login.phtml
    template/persistent/customer/form/login.phtml

    Обратите внимание, что указанные файлы должны относиться именно к используемой магазинов оформительской теме.
    В интернет-магазине наверняка будут одноимённые файлы других (в частности, стандартных) оформительских тем.
    Отличить требующие правки файлы можно по предшествующему файловому пути: он должен соответствовать папке оформительской темы.
    Про файловые пути оформительской темы можно узнать из моей статьи Как и зачем настраивать файловые пути оформительской темы?
  • В указанных файлах нужно найти форму авторизации (тег HTML form) и внутрь его добавить новое скрытое поле (тег HTML input):
    <input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

После правок надо удалить кэш.

#3 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8886
  • Регистрация: 20.02.2010

05.12.2015 01:42

Для Российской сборки версии 2.48.5 я придумал новый алгоритм автоматического исправления сторонних оформительских тем, которые были разработаны для Magento Community Edition версий ниже 1.8.1 и у которых система авторизации покупателей работает по-старому, что приводит к её сбою в свежих версиях Magento Community Edition.
Так вот, теперь Российская сборка Magento намного эффективнее автоматически исправляет работу таких устаревших оформительских тем.

Поделиться темой: