*md5プラグインが意図しないところで動く [#zd96ffe5] -ページ: [[BugTrack2]] -投稿者: [[okkez]] -優先順位: 低 -状態: 完了 -カテゴリー: その他 -投稿日: 2005-07-19 (火) 00:45:16 -バージョン: ** 修正 [#qd55ee49] PukiWikiを使いmd5ハッシュを計算する方法として、PukiWikiはかつて以下のように、URIの中にパスワード文字列を含めて(つまりGETメソッドで)呼び出す方法が取られていました。 http://example.com/pukiwiki.php?md5=password しかしこの場合、proxyサーバーやWebサーバーにパスワード文字列のログが確実に残るため、「現在もこの呼び出し方を受け付けますが」、推奨はされていません。 この後方互換のためのコードが、「md5」というキーを含むあらゆるURI(GETメソッド)およびフォーム入力(POSTメソッド)に副作用をもたらしていたため、少なくとも現行のプラグインに対しては問題を起こさない様に修正を行いました。 - [[cvs:lib/init.php]] (1.36-1.38) -- 以下の条件に合致する時のみ、md5の後方互換性のためのコードを有効にする -- GETメソッドにキー'md5'が存在し、空文字列ではない -- GET/POSTメソッドにキー'cmd'ないし'plugin'がない **メッセージ [#xd1e8f39] バグ報告というか、「こんな事がありました」という報告です。 プラグインを作っていて気付いたのですが、 <form method="post" action="index.php?plugin=xxx&mode=update"> <div> <input type="checkbox" name="md5" value="t" checked="checked" />md5.inc.php <input type="submit" value="更新"/> </div> </form> というようなフォーム((xxxはプラグイン名です))でPOSTすると、md5プラグインが動いてしまいました。 これは、正常な動作なんでしょうか? PukiWiki-1.4.6_rcで確認しました。 ** 補足 [#l24dc590] 何かの参考になるかも知れないので自分が作っていたプラグインの動作概要を書いておきます。 deldel.inc.phpのような動作をするプラグインを作っていました。動作は、 +認証 +一覧表示 +好みのものにチェックを入れてPOST +終了メッセージを表示 というイメージです。通常であれば、3->4は滞りなく実行され終了メッセージも表示されるのですが、 上記のようにname="md5"がPOSTされている場合のみ、md5プラグインが実行されます。このとき、 4は全く実行されず、いきなりmd5プラグインの画面に遷移します。md5プラグイン側で$get,$post,$varsの中を 見たところ、 $get['cmd'] = 'md5' $post['cmd'] = 'md5' $vars['cmd'] = 'md5' となっていました。 私の手元では、name="プラグイン名"の部分にprefixを付けることでこの問題を回避するようなプラグインの実装にしました。 ---- -cmdがmd5になっているので動作するのでしょうけど、なんでそうなるんでしょうね (^^; -- [[teanan]] &new{2005-07-19 (火) 03:20:25}; -なかなか興味深いですね、下記のようなURLでもmd5が起動しました。-- [[teanan]] &new{2005-07-19 (火) 03:25:20}; http://hogehoge/?plugin=hoge&md5=hogehoge http://hogehoge/?cmd=dump&md5=hogehoge --ちなみに、pukiwiki-1.4.5_1です :) -- [[teanan]] &new{2005-07-19 (火) 03:27:30}; -あー、init.phpの後方互換性が悪さしてます。条件を追加すると良いかもです。 -- [[teanan]] &new{2005-07-19 (火) 03:36:05}; /lib/init.php: 323行目付近 // 後方互換性 (?md5=...) - if (isset($vars['md5']) && $vars['md5'] != '') { + if (!isset($vars['cmd']) && !isset($vars['plugin']) && isset($vars['md5']) && $vars['md5'] != '') { $get['cmd'] = $post['cmd'] = $vars['cmd'] = 'md5'; } -コミットしました。-- [[teanan]] &new{2005-07-20 (水) 04:35:46}; -- [[cvs:lib/init.php]] (1.36) -お疲れ様です。修正確認しました。 -- [[okkez]] &new{2005-07-20 (水) 22:33:23}; -お疲れ様です。きっかけはその通りです。対応も妥当かと思います ;) このif文の中に入るケースは圧倒的に少ないことが予想されますから、判定の順序を調節して、さらに意図通りに($varsでなく)GETメソッド($get)だけをチェックする様にし、なるべく速やかに処理が完了する様に調整しました。 -- [[henoheno]] &new{2005-07-27 (水) 23:18:37}; -お疲れ様です。きっかけはその通りです。対応も妥当かと思います ;) このif文の中に入るケースは圧倒的に少ないことが予想されますから、判定の順序を調節して、さらに意図通りに($varsでなく)GETメソッド($get)をチェックする様にし、なるべく速やかに処理が完了する様に調整しました。 -- [[henoheno]] &new{2005-07-27 (水) 23:18:37}; #comment