コンテキストに基づく安全な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 に変更したり、すべてのページをHTTPSに強制したりする必要がない、より良い方法はありますか?

-編集-

/app/code/core/Mage/Core/Model/Url.php->setRouteParams()メソッドを変更できることは承知していますが、よりクリーンな方法があることを期待しています。

回答:


5

Magentoが常にユーザーが現在使用しているプロトコルと一致していると、サイトのホームページのような保護されていない URLで保護されているURLを顧客のログインページに吐き出さないなどの問題が発生します。

私が行うことをお勧めするのは、構成モジュールをカスタムモジュールの構成ファイルに追加して、保護する必要がある追加のルートを安全であると宣言することです。これを行うには、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上記の例の部分が一意でない場合、1つの定義のみが使用されるため、何かが適切に保護されいません。ノード名が一意であることを確認してください。:)

これはパスに基づいているため、たとえば、個別のCMSコンテンツページのURLに直接適用する方法はわかりません。たとえば、同じCMSにすべてを送信するリライトであるため、これらはすべてルート/パスを共有します。コントローラ。

サイト全体でHTTPSを実行する必要がある場合は、安全なベースURL設定と安全でないベースURL設定の両方にhttps:// URLを使用する必要があります。


すべての可能なフロントエンドルート(特に、catalogsearch / ajax / suggestなどの「非表示」ルート)に追加の安全なルートを含めるのではなく、コアURLモデルを変更するだけです。はい、それはコアの変更ですが、すべてのフロントエンドルートをカバーするのにかかる多くのコードに対して、追加の3行のコードです。変更したいルートが2、3しかない状況では、提案はより理にかなっています。
pspahn 2013

過去Mage_Core_Model_Store::getBaseUrlに、Facebookのタブに埋め込まれたときにストアが常に安全になるように変更しました。ただし、ブロックキャッシュに最初にヒットしたものを格納するなど、他にも考慮すべき点があります(キャッシュキーに何かを追加する必要があります)。また、Davidが言うように、ログイン/チェックアウトへの非セキュアなリンク、または最終的にはサイトにアクセスしたすべての顧客がログインまたはチェックアウトに到達した場合、最終的にセキュアモードで終了します。
Peter O'Callaghan

1
@pspahn /catalogsearch/パスを安全なものとして設定すると、一致するものをすべて含める必要があると考えました/catalogsearch/*/*/か?つまり、すべてをcatalogsearch安全にするためのルールは1つだけです。
davidalger 2013

@Cagsは私の答えに含めて見逃したものを指摘しました、そしてそれはキャッシュキーに関するメモです... URLが一貫してどちらか一方でない場合、キャッシュされたブロックが結果のリンクをめちゃくちゃにしてしまいます。
davidalger 2013

これは、キャッシュキーの良い点です。最善の方法は、HTTPSをすべて実行することです。
pspahn 2013

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を使用する
Michael

1

これは控えめですがシステムの重要なオプションです| 構成| Web〜「フロントエンドでセキュアURLを使用する」と言う必要があります-これをyesに設定すると、httpsによってロードされたページはhttpsリンクを使用します。

ほとんどの場合、コードを記述したり、追加の構成を提供したりする必要はありません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.