Использование безопасных URL-адресов на основе контекста


Я знаком с использованием различных методов для создания безопасного URL-адреса на основе контекста, т.Е.:

$this->getUrl('my-page', array('_forced_secure' => $this->getRequest()->isSecure()));

Это отлично подходит для создания ссылок, которые будут направлять на защищенную страницу , пока вы находитесь в безопасном режиме (или просто будут ссылаться на незащищенную страницу, если не используете безопасный режим).

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

Из того, что я могу сказать, мои единственные реальные варианты:

  1. Измените каждый экземпляр $this->getUrl(), чтобы он был похож на приведенный выше фрагмент.
  2. Установите небезопасный base_url для использования HTTPS, принудительно защищая все страницы.

Есть ли лучший метод, который не потребует изменения каждого вызова на $this->getUrl() или принудительного перевода всех страниц на HTTPS независимо от контекста пользователя?

--редактировать --

Я знаю, что могу изменить метод /app/code/core/Mage/Core/Model/Url.php->setRouteParams(), хотя я надеюсь, что есть более чистый способ.

 9
Author: pspahn, 2013-09-27

3 answers

Если Magento всегда будет соответствовать протоколу, по которому в данный момент работает пользователь, это вызовет проблемы, такие как не выплевывание безопасных URL-адресов на страницу входа клиента при использовании незащищенного URL-адреса, такого как домашняя страница сайта.

Что я бы предложил сделать, так это добавить некоторый конфигурационный XML в конфигурационный файл пользовательского модуля, чтобы объявить дополнительные маршруты, которые вам нужны, безопасными как безопасные. Вы делаете это, имея это в своем config.xml файл (замена module_or_route_id чем-то уникальный:

<config>
    <frontend>
        <secure_url>
            <module_or_route_id>/route/</module_or_route_id>
        </secure_url>
    </frontend>
</config>

Если вы взглянете на config.xml для модуля Mage_Customer вы увидите пример этого, где путь "/customer/" был определен как безопасный.

Примечание: если часть module_or_route_id приведенного выше примера не уникальна, будет использоваться только одно определение, что приведет к тому, что что-то не будет должным образом защищено. Убедитесь, что имя узла уникально.:)

Поскольку это основано на пути, я не уверен, как это будет напрямую применяться к URL-адресам отдельных Например, страницы содержимого CMS, поскольку все они по-прежнему будут иметь общий маршрут/путь, поскольку это перезапись, которая отправляет их все на один и тот же контроллер CMS.

Если вам действительно нужно, чтобы весь сайт работал по протоколу HTTPS, вам придется использовать URL-адреса https:// как для безопасных, так и для небезопасных базовых URL-адресов.

 5
Author: davidalger, 2015-06-25 19:04:35

Задайте следующее в своем файле app/etc/config.xml:

<?xml version="1.0"?>
<config>
  <frontend>
    <secure_url>
      <all>/</all>
    </secure_url>
  </frontend>
</config>

Это работает в Magento 1.9.1

Если пользователь использует https, это должно заставить все URL-адреса переписываться на https.

 2
Author: Artistan, 2015-06-02 19:39:18

В System|Configuration|Web есть заниженная, но важная опция ~, где вы должны сказать "использовать безопасный URL-адрес в интерфейсе" - если вы установите для этого значение "да", то страница, загруженная по протоколу https, будет использовать ссылки https,

В большинстве случаев нет необходимости писать код или предоставлять дополнительную конфигурацию

 1
Author: dancl, 2014-12-23 12:14:59