根据上下文使用安全URL


9

我熟悉使用各种方法根据上下文生成安全的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()方法,尽管我希望有一种更干净的方法。

Answers:


5

拥有Magento的总是匹配该用户目前会引起一些问题,如协议随地吐痰的安全网址给客户登录页面上的非安全网址喜欢的网站的主页时。

我建议做的是在自定义模块的配置文件中添加一些配置XML,以声明需要确保安全的其他路由。为此,您可以在config.xml文件中使用它(用module_or_route_id唯一的东西代替:

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

如果您查看Mage_Customer模块的config.xml,您将看到一个示例,其中已将路径“ / customer /”定义为安全。

注意:如果module_or_route_id以上示例的部分不是唯一的,则将仅使用一个定义,因此无法正确保护某些内容。确保节点名称是唯一的。:)

因为这是基于路径的,所以我不确定如何将其直接应用于各个CMS内容页面的URL,例如,由于它们都是重写,因此它们仍将共享路由/路径,因此会将它们全部发送到同一CMS控制器。

如果确实需要整个站点来运行HTTPS,则必须将https:// URL用于安全和非安全基本URL设置。


我宁愿只修改核心URL模型,而不是为每个可能的前端路由(尤其是“非可见”路由,例如catalogsearch / ajax / suggest等)添加附加的安全路由。是的,这是一个核心更改,但是它是另外三行代码,而涵盖所有前端路由则需要很多行。在您只想更改几条路线的情况下,您的建议就更有意义了。
pspahn

过去,我们进行了修改,Mage_Core_Model_Store::getBaseUrl以使商店嵌入Facebook标签时始终保持安全。但是,还需要考虑其他事项,例如块缓存首先存储哪个命中(您必须在缓存键中添加一些内容)。正如David所说,您还将拥有非安全的登录/签出链接,或者最终,如果您的站点上的每个客户都登录或点击了签出,最终他们都将最终以安全模式进入。
彼得·奥卡拉汉

1
@pspahn您是否认为将/catalogsearch/路径设置为安全应该包含任何匹配项/catalogsearch/*/*/?即,仅需遵循一条规则即可确保一切都处于catalogsearch安全状态。
davidalger 2013年

@Cags指出了我错过的内容,包括我的答案,这是有关缓存键的说明……如果URL彼此不一致,则将有缓存的块弄乱了生成的链接。
davidalger 2013年

这是关于缓存键的一个好点。似乎最好的方法是仅运行所有HTTPS。
pspahn

2

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。


更好的是:不要使用config.xml,而要使用local.xml
迈克尔

1

这是System |中低调但重要的选择 配置| 网络〜您必须说“在前端使用安全网址”-如果将其设置为“是”,则https加载的页面将使用https链接,

在大多数情况下,无需编写代码或提供其他配置

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.