PukiWikiを使いmd5ハッシュを計算する方法として、PukiWikiはかつて以下のように、URIの中にパスワード文字列を含めて(つまりGETメソッドで)呼び出す方法が取られていました。
http://example.com/pukiwiki.php?md5=password
しかしこの場合、proxyサーバーやWebサーバーにパスワード文字列のログが確実に残るため、「現在もこの呼び出し方を受け付けますが」、推奨はされていません。
この後方互換のためのコードが、「md5」というキーを含むあらゆるURI(GETメソッド)およびフォーム入力(POSTメソッド)に副作用をもたらしていたため、少なくとも現行のプラグインに対しては問題を起こさない様に修正を行いました。
バグ報告というか、「こんな事がありました」という報告です。
プラグインを作っていて気付いたのですが、
<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>
というようなフォーム*1でPOSTすると、md5プラグインが動いてしまいました。 これは、正常な動作なんでしょうか?
PukiWiki-1.4.6_rcで確認しました。
何かの参考になるかも知れないので自分が作っていたプラグインの動作概要を書いておきます。 deldel.inc.phpのような動作をするプラグインを作っていました。動作は、
というイメージです。通常であれば、3->4は滞りなく実行され終了メッセージも表示されるのですが、 上記のようにname="md5"がPOSTされている場合のみ、md5プラグインが実行されます。このとき、 4は全く実行されず、いきなりmd5プラグインの画面に遷移します。md5プラグイン側で$get,$post,$varsの中を 見たところ、
$get['cmd'] = 'md5' $post['cmd'] = 'md5' $vars['cmd'] = 'md5'
となっていました。
私の手元では、name="プラグイン名"の部分にprefixを付けることでこの問題を回避するようなプラグインの実装にしました。
http://hogehoge/?plugin=hoge&md5=hogehoge http://hogehoge/?cmd=dump&md5=hogehoge
/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'; }