We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6350
    • 421 Posts
    Quote from: sama55 at Jan 27, 2009, 08:05 PM

    WayFinderには、フルパスを出力するオプション(fullLink)があるのですが、何か役に立ちますか?
    (fullLinkオプションは、Let’s enjoyのリソース解説にはありません)
    使ってみましたが一度 Contact Us (共有SSLのページ)にアクセスした後は他のメニューリンクが
    https://ss1.coressl.jp/xxx.s78.coreserver.jp/modx/xxx.html

    と出力され、とりあえずリンクの有効なアドレスが表示されます。ブラウザの勝手な解釈で
    https://ss1.coressl.jp/modx/xxx.html

    のようないい加減な出力よりはましですが https://ss1.coressl.jp/ の部分を http:// に置換するようなオプションがあれば最高なんですけどね。
      • 26012
      • 324 Posts
      Quote from: dainiti at Jan 27, 2009, 09:28 PM

      Quote from: sama55 at Jan 27, 2009, 08:05 PM

      WayFinderには、フルパスを出力するオプション(fullLink)があるのですが、何か役に立ちますか?
      (fullLinkオプションは、Let’s enjoyのリソース解説にはありません)
      使ってみましたが一度 Contact Us (共有SSLのページ)にアクセスした後は他のメニューリンクが
      https://ss1.coressl.jp/xxx.s78.coreserver.jp/modx/xxx.html
      と出力され、とりあえずリンクの有効なアドレスが表示されます。ブラウザの勝手な解釈で
      https://ss1.coressl.jp/modx/xxx.html  のようないい加減な出力よりはましですが、
      やはりそうなっちゃいますよね。
      Quote from: dainiti at Jan 27, 2009, 09:28 PM

      https://ss1.coressl.jp/ の部分を http:// に置換するようなオプションがあれば最高なんですけどね。
      ええ、私も同じように考えました。ただ、この問題は、WayFinderに限った話ではない(Dittoなどを
      含むリソースへのパスを発生させるすべてのモジュールに関係する)と思ったので、下の大胆な
      プランに行き着きました。
      http://modxcms.com/forums/index.php/topic,32384.msg197499.html#msg197499

      でも、https://のページ内にhttp://の画像とかが含まれてしまうので、そういう状態で暗号化された
      ページをブラウザがどのように判断するのかは、実験したことがないのでアカンのかも...
        • 6350
        • 421 Posts
        Quote from: sama55 at Jan 27, 2009, 10:18 PM

        ええ、私も同じように考えました。ただ、この問題は、WayFinderに限った話ではない(Dittoなどを
        含むリソースへのパスを発生させるすべてのモジュールに関係する)と思ったので、下の大胆な
        プランに行き着きました。
        http://modxcms.com/forums/index.php/topic,32384.msg197499.html#msg197499
        結局自作スニペットに戻りそうですが少し改造して
        <?php
        $docId = $modx->documentObject['id'];
        if ($docId==6) {
        	$modx->config['site_url']='https://ss1.coressl.jp/xxx.s78.coreserver.jp/modx/';
        } else {
        	$modx->config['site_url']='http://xxx.s78.coreserver.jp/modx/';
        }
        $modx->config['base_url']='http://xxx.s78.coreserver.jp/modx/';
        return "";
        ?>

        のようなスニペットコールをテンプレートの <base href= の前に挿入すれば HTTP_VIA にも SERVER_HTTPS にも影響されずに config.inc.php を書き換えるのと同じ結果になりました。この中でページを指定しているのは余分なテンプレート変数を全頁に配置したくないからです。

        ZeRo さんのプラグインでもという意見と sama55 さんの意見をミックスしたような形で config.inc.php を書き換えるよりは少し汎用性があるかもしれません。プラグインにしないのは余計なリダイレクトをしたくないためですがまだそこまで知識がないのが本当の理由です(^^ゞ

        Quote from: sama55 at Jan 27, 2009, 10:18 PM

        でも、https://のページ内にhttp://の画像とかが含まれてしまうので、そういう状態で暗号化された
        ページをブラウザがどのように判断するのかは、実験したことがないのでアカンのかも...
        普通の画像リンクだと FireFox でもエラーは出てたと思うんですが
        <img src="/modx/manager/includes/veriword.php"> のような場合には警告が出ないようです。(ページがSSLの場合でもルートから /modx/~のようにアクセスすると ブラウザでは http://~になってしまう)
        FireFox の新たな脆弱性を発見したような気分です。
          • 6350
          • 421 Posts
          いまになって、大きな見落としに気が付きました。

          config.inc.php を書き換える方法と自作スニペットで base_url を書き換える場合でも同じです。

          Wayfinder で出力されるリンクが Contact Us の SSL ページにアクセスした場合 Home へのリンクのみが
          https://ss1.coressl.jp/xxx.s78.coreserver.jp/modx/

          になってしまってます。&fullLinkを指定してもいないのに fullLink と同じ結果?
          これはWayfinder を改造しなければいけないんでしょうか。結局 &rowTpl をうまく使いこなせれば一番いいんですが。
          -------------------------------------------------------------------------------------
          <li[+wf.id+][+wf.classes+]>
             <a href="http://[+wf.link+]" title="[+wf.title+]" [+wf.attributes+]>[+wf.linktext+]</a>
             [+wf.wrapper+]
          </li>
          -------------------------------------------------------------------------------------
          上記のなかで赤字のプレースフォルダ部分を [+wf.Mylink+] のように書き換えるのが一番でしょうか。それができればウェブリンクの場合も対応できそうです。やり方がわからんけど(^^ゞ
            • 6350
            • 421 Posts
            Contact Us へのウェブリンクと同じように Home へのウェブリンクを作って http://xxx.s78.coreserver.jp/modx/ へ飛ばすのが一番の方法だと気がつきました。

            あまり全体の構造を複雑にしたくないので、
            プレースフォルダとかプラグインの勉強はこれからです。
              • 26012
              • 324 Posts
              Quote from: dainiti at Jan 28, 2009, 12:49 AM

              Contact Us へのウェブリンクと同じように Home へのウェブリンクを作って http://xxx.s78.coreserver.jp/modx/ へ飛ばすのが一番の方法だと気がつきました。
              う~~ん、どうでしょう。芋づる式に対応、なんてことにならなければよいのですが・・・
              Quote from: dainiti at Jan 28, 2009, 12:49 AM

              あまり全体の構造を複雑にしたくないので、プレースフォルダとかプラグインの勉強はこれからです。
              対応箇所や論理をシンプルにしたい、という思いは一緒です。

              上記のhttpsの中のhttpは、「SSLど素人のたわ言」として忘れてください (すいません)。
              そもそもページの暗号化は、入力フォームや確認ページに表示された個人情報をはじめとする
              重要な情報を暗号化することが目的ですから、外部リンク先の画像などが仮に暗号化されなくとも
              大切な情報は守られてるわけだし、暗号化の処理が介入するのがトランスポート層であることまで
              考えれば、そんな細かいことまでゴリゴリ考える必要もないわけで。。。(えらく恥ずかしい)

              また、この問題は対応方式ありきではなくて、初心に帰って、やりたいことを素直にコードに落とした
              方がよりシンプルな解に結びつくような気がしてます。もう少し具体的に言うと、「特定なページだけ
              暗号化したい~~~」ってことは、ページごとに処理を分岐させるための条件設定を行えばよくて、
              MODxでページごとに条件を設定できる機能=テンプレート(ドキュメント)変数だね、となって、
              ならば、Joomla!方式だわな、、、という流れで至極単純なんです。
              で、この基本原則を守りつつ(テンプレート変数を利用する形で)、一番改造量が少なくて済む箇所に
              目をつけて、既存の処理を阻害しないようにビシっと判定文を入れて対処してやれば、改造の影響が
              少ない状態で対応できるのではないかと考えました。
                • 6350
                • 421 Posts
                Quote from: sama55 at Jan 28, 2009, 01:33 AM

                う~~ん、どうでしょう。芋づる式に対応、なんてことにならなければよいのですが・・・
                たぶん、芋づる式にはなると思います。base_url を使っているところがすべて関連してくるので。Joomlma のように最初から SSL に対応していても共有SSLが使えるCMSはたぶんありません。modx はフレームワークとしてのよさを考えればとりあえずコア側で対応する必要もないと思います。・・・が base_url コア内での乱用だけはやめてほしい。

                Quote from: sama55 at Jan 28, 2009, 01:33 AM

                上記のhttpsの中のhttpは、「SSLど素人のたわ言」として忘れてください (すいません)。
                そもそもページの暗号化は、入力フォームや確認ページに表示された個人情報をはじめとする
                重要な情報を暗号化することが目的ですから、外部リンク先の画像などが仮に暗号化されなくとも
                大切な情報は守られてるわけだし、暗号化の処理が介入するのがトランスポート層であることまで
                考えれば、そんな細かいことまでゴリゴリ考える必要もないわけで。。。(えらく恥ずかしい)
                たしかに、エンドユーザのパソコンからサーバ間の暗号化でメール自体が暗号化されるわけではありません。それだけのことで専用SSLを数万円を出して購入する価値もないので共有SSLを利用する価値があるわけです。また要望があるからこそ、さくらも2/5からのサービス提供になったのだろうと思います。

                さらに技術的な問題以上にパソコンを操作している「エンドユーザに不安感を与えたくない」というのが一番の理由です。7割以上が IE ユーザーであるので「暗号化されていない項目が・・・」と表示されること自体を避けたいわけです。

                このようなメッセージを残したままにするよりも SSL なしで警告が表示されないほうがたぶん支持されるでしょう。でも今回はSSLをつかう技術的な興味ではじめたことなので実際に利用するかどうかは別なことです。

                Quote from: sama55 at Jan 28, 2009, 01:33 AM

                また、この問題は対応方式ありきではなくて、初心に帰って、やりたいことを素直にコードに落とした
                方がよりシンプルな解に結びつくような気がしてます。もう少し具体的に言うと、「特定なページだけ
                暗号化したい~~~」ってことは、ページごとに処理を分岐させるための条件設定を行えばよくて、
                MODxでページごとに条件を設定できる機能=テンプレート(ドキュメント)変数だね、となって、
                ならば、Joomla!方式だわな、、、という流れで至極単純なんです。
                で、この基本原則を守りつつ、一番改造量が少なくて済む箇所に目をつけて、既存の処理を
                阻害しないようにビシっと判定文を入れて対処してやれば、改造の影響が少ない状態で対応できる
                のではないかと考えました。
                今回は、タイトルのように「eForm で画像認証を使いたい」が目的ではじまって結果的には画像認証に失敗する原因がSSLページの中に含まれる http:// でアクセスされる <img src="/modx/manager/includes/veriword.php">の記述にあったわけで、そこから SSL とか base_href の話に移ってしまったわけですが、プラグインを作るのが目的ではありません。当初の目的は自分としては解決できたのでそれでよしと思っています。

                プラグインとかスニペットで汎用化するのであればテンプレート変数を使っていろいろ条件設定をできるのが一番だとは思います。またそれだけの要望があれば ZeRo さんとか soushi さんにもっときれいなコードで作ってもらったほうがいいかもしれません。sama55 さんが作ってくれれば僕もそれを使う可能性もあります。

                ということなので作法とか原則の話はまた別の機会に・・ laugh
                  • 6350
                  • 421 Posts
                  config.inc.php で base_url をいじるのをやめてwayfinder.inc.php 371行目 の変更で共有SSL、専用SSL どちらも解決しました。

                  $linkScheme = $this->_config[’fullLink’] ? ’full’ : ’’;
                  ↓
                  $linkScheme = $this->_config[’fullLink’] ? ’full’ : ’http’;

                  実際のところ makeURL のなかでも coreserver では動かないだろうと思われる部分もありました。
                  $scheme= ($_SERVER[’HTTPS’] ? ’http’ : ’https’);


                  あと、Home だけhttps:// になる件も wayfinder.inc.php 379行目を変更しました。
                  } elseif ($tempDocInfo[’id’] == $modx->config[’site_start’]) {
                  $tempDocInfo[’link’] = $modx->config[’site_url’];
                  ↓
                  $tempDocInfo[’link’] = ’http://’.$_SERVER[’HTTP_HOST’].$modx->config[’base_url’];
                  } else {

                  なお、こちらの方法で間違いに気が付いたので報告しておきます。
                  site_url はスニペットの中で変更しても html に反映されないようです。config.inc.php をいじらない場合にはやっぱりプラグインにする方法とか考える必要がありそうです。
                  <?php
                  $docId = $modx->documentObject['id'];
                  if ($docId==6) {
                  	$modx->config['site_url']='https://ss1.coressl.jp/xxx.s78.coreserver.jp/modx/';
                  } else {
                  	$modx->config['site_url']='http://xxx.s78.coreserver.jp/modx/';
                  }
                  $modx->config['base_url']='http://xxx.s78.coreserver.jp/modx/';
                  return "";
                  ?>
                    • 28073
                    • 164 Posts
                    こんばんわ、sslの件で色々と話をされてるみたいなので、少し参加させてください smiley

                    sslSwitcherを使うと[~s23~]といった書き方で、URL生成時にhttps用とhttp用と振り分けて生成してくれます。
                    (詳しくはsslSwitcher付属のreadmeをご覧ください)
                    上記機能を前提にテンプレートリンクの張り方を以下のように変更します。

                    <li[+wf.classes+]><a href="[~s[+wf.docid+]~]" title="[+wf.title+]">[+wf.linktext+]</a>[+wf.wrapper+]</li>
                                                     ↑このあたりが肝
                    


                    WayfinderではドキュメントIDだけを出力して[~s数字~]というsslSwitcher用の書き方にあわせると、その後sslSwitcherがURLに展開してくれます。
                    とりあえず専用SSLだとこの方法でいけそうな気がしますが、どうでしょうか。
                    検証したいのですが専用SSLはさすがに個人で持っていないので(汗)
                    これだとsslSwitcherのインストールとテンプレートの変更だけでいけるかもしれません。

                    共有SSLは少しsslSwitcherの改造が必要ですが、なんとかなりそうな気がしています。
                    こちらは検証できたら報告します smiley

                      • 6350
                      • 421 Posts
                      soushi さん、こんにちは。

                      Quote from: soushi at Jan 30, 2009, 03:40 PM

                      sslSwitcherを使うと[~s23~]といった書き方で、URL生成時にhttps用とhttp用と振り分けて生成してくれます。
                      (詳しくはsslSwitcher付属のreadmeをご覧ください)
                      上記機能を前提にテンプレートリンクの張り方を以下のように変更します。

                      <li[+wf.classes+]><a href="[~s[+wf.docid+]~]" title="[+wf.title+]">[+wf.linktext+]</a>[+wf.wrapper+]</li>
                                                       ↑このあたりが肝
                      

                      WayfinderではドキュメントIDだけを出力して[~s数字~]というsslSwitcher用の書き方にあわせると、その後sslSwitcherがURLに展開してくれます。
                      とりあえず専用SSLだとこの方法でいけそうな気がしますが、どうでしょうか。
                      現状でも専用SSL では問題有りませんが共有SSL のアドレスをオプションで指定できればありがたいですね。
                      上記のテンプレートリンクの張り方についてどのあたりの部分のことを言っているのかがよくわかりません。Wayfinder の標準テンプレートでしょうか?ここまでやってもらえれば、Wayfinder の修正も必要なくなるんでしょうね。

                      Quote from: soushi at Jan 30, 2009, 03:40 PM

                      検証したいのですが専用SSLはさすがに個人で持っていないので(汗)
                      これだとsslSwitcherのインストールとテンプレートの変更だけでいけるかもしれません。

                      共有SSLは少しsslSwitcherの改造が必要ですが、なんとかなりそうな気がしています。
                      こちらは検証できたら報告します smiley
                      じつは sslSwitcher の動作がよくわかっていないので放り出している状態です。
                      テンプレート変数で「SwitchHTTP to HTTPS」 にチェックを入れると専用SSL でも「アドレスが見つからない」といったエラーメッセージで https:// にジャンプしてくれません。ブラウザの URL 欄には正常に https:// から始まる URL が表示されています。

                      「UseHTTPS」の存在意義もよくわかっていない状態です。専用SSL であれば https:// ではじまるアドレスをブラウザに入力すればちゃんと表示されます。「SwitchHTTP to HTTPS」でジャンプしてくれればこのオプションは必要がないのではないかということです。

                      実際に Encryptionスニペット では http:// でアクセスされた場合 https:// にリダイレクトされるようになっており、標準の動作が 「SwitchHTTP to HTTPS」 に該当していると思っています。