We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26012
    • 324 Posts
    みなさんこんにちは。

    コアソースに障害がありましたので報告します。
    本件はhttp://modxcms.com/forums/index.php/topic,30227.0.htmlで議論されてるようです。

    1.現象
     テンプレート変数の規定値に@EVALでPHPコードを書くとコードが実行されない。

    2.対処法
     バインド(EVAL)を使わずに直値(文字列)で設定  ※対処できないケースが多々あると思いますが・・・ 

    3.影響範囲
     V0.9.6.3(前バージョンは未確認)
     オプションボタンなどでは影響は限定的ですが、一般テキストではコードが漏洩する可能性があります。
      • 26012
      • 324 Posts
      みなさんこんにちは。

      グローバル設定の「CAPTCHAコードの使用」をONにして、インストーラに付属するサンプルテンプレート(MODxHost)のWebLoginから入ろうとするとログインに失敗するのですが、みなさんのサイトではどうでしょうか? (最近V0.9.6.3にアップグレードしたので、この影響かもしれないのですが・・・)
      MEGUさんのサイト(http://modx.liolion.net/howtomodx/aboutsamplesite.html)で類似した現象が報告されてますが、「0.9.6でFIX」との記述があり、自身のサイト固有の問題か、バグ(レベルダウン?)か判断しかねてます。
        • 6350
        • 421 Posts
        sama55 さん。

        こんなところでしか恩返しができないので・・・自分のところでは、グローバル設定の「CAPTCHAコードの使用」をONにした状態で新規インストール(CORESERVER)、アップグレード(SAKURA)とも問題なく WEB ログインできます。サンプルテンプレート(MODxHost)はそのままでCAPTCHAの指定はしておりません。
          • 6350
          • 421 Posts
          念のためさらに試していたところ新規インストール(CORESERVER)で キャッシュをクリアの後 WEB ログインしてみたところ一回目のログインは必ずエラーになるようになりました。二回目続けてログインすると成功するようです。

          ここで新しい発見をしました。WEBユーザーにログインしたタイミングログインに失敗したタイミングで管理画面がログアウトされてしまいます。
          どちらもアップグレード(SAKURA)では再現しません。

          サーバーに依存するんでしょうか、それとも新規インストールだけ?
            ・
            ・
          と思いながらさらに試したところ、どちらも一回目はログインできなくなりました(-_-;)
          念のため CAPTCHA をはずした状態では WEB ログイン後に管理画面がログアウトされることはないことを確認しました。
            ・
          さらに、SAKURA のアップグレード版では毎回発生するわけではなく時々そういう状態になるようです。
          ・・・といっているうちに CORESERVER の新規インストールでも再現しなくなりました・・・(@_@;

          こういうときは一度管理画面をログアウトすると再現しやすくなるようです。
            • 26012
            • 324 Posts
            dainitiさん

            検証ありがとうございます。大変助かります。
            Quote from: dainiti at Jan 06, 2009, 11:25 AM

            念のためさらに試していたところ新規インストール(CORESERVER)で キャッシュをクリアの後 WEB ログインしてみたところ一回目のログインは必ずエラーになるようになりました。二回目続けてログインすると成功するようです。
            ここで新しい発見をしました。WEBユーザーにログインしたタイミングで管理画面がログアウトされてしまいます。
            どちらもアップグレード(SAKURA)では再現しません。
            サーバーに依存するんでしょうか、それとも新規インストールだけ?
              ・
            と思いながらさらに試したところ、どちらも一回目はログインできなくなりました。二回目でログインしたタイミングで管理画面がログアウトされるのも新規、アップグレードに関係ないようです(-_-;)
            念のため CAPTCHA をはずした状態では WEB ログイン後に管理画面がログアウトされることはないことを確認しました。
              ・
            さらに、SAKURA のアップグレード版では毎回発生するわけではなく時々そういう状態になるようです。
            う~~ん、そうですか・・・。私が検証したのは、SAKURAのアップグレード版なんです。
            何と言いますか、様々な要素が複雑に入り組んでて規則性が絞れないんですよね。

            ただ、使い始めたばかりで、使用法や制限事項など細かい部分が整理できてない気もするので、dainitiさんから頂いた情報や以下の絡みも含めて、もう少し調査してみます。
             ・サーバキャッシュとの関係
             ・クライアント(ブラウザ)キャッシュ/クッキーとの関係
             ・WebLoginのCAPTCHA認証に対する方針や処理内容
             ・ログインユーザIDの退避先

            余談になりますが、WebLoginに着目しているのは、MODxの内部処理と発信系の機能は概ね網羅できたので、次はウェブログインからはじまるコメントなどのインタラクティブな機能を叩いてみようと思った矢先にこれで、ちょっと萎えてます・・・
              • 6350
              • 421 Posts
              前にも見た記憶が有るので検索してみました。
              エラーメッセージは少々違うようですが「WEBユーザーでログインできない」は前のバージョンから0.9.6.1 のあたりから問題があったようです。このころは力が入っていなかったので「ふ~ん」といった感じで横目でみてました。このころの CHAPTHA との関連はメッセージからはよくわかりません。

              今回のメッセージは
              「The security code you entered didn’t validate Please try to login again!」
              「セキュリティーコードを確認してもう一度ログインしてください」
              ですよね。

              weblogin.processor.inc.php の 303行目の if(isset($modx->config[’use_captcha’]) あたりの判定が間違っているような気がします。とはいっても 0.9.6.2 でも 301行目に同じコードがありますし・・・?
              なんとなくその後の session_id とからんでいるような・・・

              古いバージョンで検証してみました。
              0.9.6.1p2 再現せず
              0.9.6.2 再現あり
              ということで 0.9.6.2 から入ったバグのようです。

              かといって・・・0.9.6.1p2 と 0.9.6.2 のスニペット weblogin のバージョンは同じ 1.0 ということはわけがわかりません。

              過去の検索結果は少し違うようです。
              http://www.google.com/custom?domains=modxcms.com&q=web%26%2312525%3B%26%2312464%3B%26%2312452%3B%26%2312531%3B&sa=Google+Search&sitesearch=modxcms.com%2Fforums%2F&client=pub-3686375124247927&forid=1&ie=ISO-8859-1&oe=ISO-8859-1&cof=GALT%3A%230066CC%3BGL%3A1%3BDIV%3A%23999999%3BVLC%3A336633%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A00DA2C%3BALC%3A0066CC%3BLC%3A0066CC%3BT%3A000000%3BGFNT%3A666666%3BGIMP%3A666666%3BFORID%3A1&hl=en
                • 26012
                • 324 Posts
                下のスレッドに移しましたのでそちらを参照してください。(special thanks dainiti)
                http://modxcms.com/forums/index.php/topic,32162.0.html
                  • 19955
                  • 2 Posts
                  RC1-1.0(日本語)でhtmlインポートに動作不具合がありました。
                  複数ファイルをインポートした際、二つ目以降のファイルがインポートされないというものです。
                  調査したところ、TransAliasプラグインと関係があるようです。

                  環境
                  CentOS 5.2
                  PHP 5.1.6
                  mysql 5.0.45
                  ソース http://code.google.com/p/modx-ja/downloads/detail?name=evolution1.0J-rc1.zip

                  manager/includes/document.parser.class.inc.php
                  function evalplugin

                  で実行されている $pluginCode の中身なんですが、
                  プラグインをインスタンス化&実行するコードとなっていまして、
                  今回の場合の取得元であるsiteCache.idx.phpの中のコードを見ると(キャッシュが生成される過程は追ってないです。すいません・・)
                  当該部分のコードは以下のようになっています。
                  assets/cache/siteCache.idx.php
                  
                  $p['TransAlias'] = '/**
                   * @name TransAlias
                   * @desc Handle the task of loading transliteration tables and applying them
                   *      to a string for the purpose of creating a friendly URL alias.
                   * @package modx
                   * @subpackage modx.plugins.transalias
                   * @author Olivier B. Deland, TV override by Mike Schell
                   * @license GNU General Public License
                   */
                  
                  /*
                   * Initialize parameters
                   */
                  if (!isset ($alias)) { return ; }
                  if (!isset ($plugin_dir) ) { $plugin_dir = \'transalias\'; }
                  if (!isset ($plugin_path) ) { $plugin_path = $modx->config[\'base_path\'].\'assets/plugins/\'.$plugin_dir; }
                  if (!isset ($table_name)) { $table_name = \'common\'; }
                  if (!isset ($override_tv)) { $override_tv = \'\'; }
                  
                  if (!class_exists(\'TransAlias\')) {
                      require_once $plugin_path.\'/transalias.class.php\';
                      $trans = new TransAlias($modx);
                  }
                  
                  /*
                   * see if TV overrides the table name
                   */
                  if(!empty($override_tv)) {
                      $tvval = $trans->getTVValue($override_tv);
                      if(!empty($tvval)) {
                          $table_name = $tvval;
                      }
                  }
                  
                  /*
                   * Handle events
                   */
                  $e =& $modx->event;
                  switch ($e->name ) {
                      case \'OnStripAlias\':
                          if ($trans->loadTable($table_name)) {
                              $output = $trans->stripAlias($alias);
                              $e->output($output);
                              $e->stopPropagation();
                          }
                          break ;
                      default:
                          return ;
                  }';

                  問題と思われるコードは、以下のtransaliasクラスをインスタンス化する箇所です。
                  if (!class_exists(\'TransAlias\')) {
                      require_once $plugin_path.\'/transalias.class.php\';
                      $trans = new TransAlias($modx);
                  }

                  判定の混乱だと思うんですが、
                  ・class_existsの判定によって
                  ・$trans にインスタンスを代入している
                  ため、一度 require された以降(インポートされるファイルの二つ目以降)は $trans が定義されないまま以降のコードが実行され、

                  $trans->loadTable($table_name)

                  などのコードがエラーとなり、インポートがストップするようです。
                  強引ですが、以下のようにインスタンス化のコードを判定の外に出したところ、インポートが成功するようになりました。
                  if (!class_exists(\'TransAlias\')) {
                      require_once $plugin_path.\'/transalias.class.php\';
                  }
                      $trans = new TransAlias($modx);

                  不具合報告と言いましたが、こちらの設定に問題があった場合は申し訳ないです。
                  もしそうであれば、現状はcacheの中を直接書き換えて動作させていますが、正しい修正方法などもご教示いただければ幸いです。
                    • 26012
                    • 324 Posts
                    MODexocistさん はじめまして

                    TransAliasはRCからコアのロジックを切り出して追加実装されたプラグインのようです。
                    yamaさんともいぶかしく見てたのですが虫がいましたか。。。しかも・・・な
                    MODexocistさんに断わりなく失礼と思いましたが、JIRAに報告しておきました。
                    今後ともよろしくお付き合いください。
                    • マージ作業を通じて実際のコードを確認してましたが、単純な切り出しのみではなく解釈が加わっているようには感じました。コア自体はいくぶんシンプルになったので、プラグイン対応に切り換えるという考え方自体はよいと思いました。

                      sama55さんから指摘を受けたものの、ロジックを追うのは大変だしたぶん大丈夫だろうと思って検証はパスしましたが、国内でほとんど実績が確認されてないプラグインという不安はありましたね。連絡ありがとうございました。