*追加で整形ルールを表示すると編集になる [#v5c7c8aa] -ページ: BugTrack -投稿者: [[Ratbeta]] -優先順位: 普通 -状態: 提案 -カテゴリー: 本体バグ -投稿日: 2004-03-29 (月) 16:18:13 -バージョン: 1.4.2 **メッセージ [#n29643c2] addコマンドでページに追加する画面に移動し、"テキスト整形のルールを表示する"を~ クリックすると編集の画面(editコマンド)に移動してしまいます。~ 修正案 : --- ./html.php 2004-03-29 16:05:22.000000000 +0900 +++ ./html.php 2004-03-29 16:05:02.000000000 +0900 @@ -177,7 +177,7 @@ $s_original = array_key_exists('original',$vars) ? htmlspecialchars($vars['original']) : $s_postdata; $b_preview = array_key_exists('preview',$vars); // プレビュー中TRUE $btn_preview = $b_preview ? $_btn_repreview : $_btn_preview; - + $cmd = $vars['cmd']; $body = <<<EOD <form action="$script" method="post"> <div class="edit_form"> @@ -204,7 +204,7 @@ else { $body .= <<<EOD <ul> - <li><a href="$script?cmd=edit&help=true&page=$r_page">$_msg_help</a></li> + <li><a href="$script?cmd=$cmd&help=true&page=$r_page">$_msg_help</a></li> </ul> EOD; } ---- - cvsに投入しました。[[cvs:html.php]](v1.4:r1.99) -- [[ぱんだ]] &new{2004-04-04 (日) 00:34:07}; -[[BugTrack/586]] のXSS脆弱性の原因となっていたため、この修正は(結果的になんですが)差し戻しました。サニタイジング後の内容であれば半分OKなんですが、[[BugTrack/586]] の例にある様に、不適切な値が cmd に入っていた場合ここをどう処理すべきか、という問題が残ります。 -- [[henoheno]] &new{2004-06-27 (日) 21:03:32}; -cmdで呼び出すプラグインはplugin=で呼び出せないようにする、というのはどうでしょうか?この例に漏れるプラグインがあるかもしれませんが…。 -- [[Ratbeta]] &new{2004-06-28 (月) 18:44:14}; -[[BugTrack/586]] にも書いた様に、plugin=edit は cmd=edit とは微妙に挙動が違う様ですね。とりあえず、[[開発日記/2004-06-28]]の様な入力チェックを加えたので、 plugin と cmd のどちらにも値が入っているという事態は無くなりました。 -- [[henoheno]] &new{2004-06-28 (月) 21:48:09}; -cmd をプラグイン化する動きは 1.4 からのもので、私はまだこの利点・欠点などを把握していませんので、[[ぱんだ]]さんが復帰されるまでは大掛かりな変更はできないですね・・・ -- [[henoheno]] &new{2004-06-28 (月) 21:51:47}; - この方法ではだめでしょうか。 // $Id: html.php,v 1.62 2007/05/12 14:24:42 henoheno Exp $ (中略) // Show 'edit' form function edit_form($page, $postdata, $digest = FALSE, $b_template = TRUE) { (中略) // Add plugin $addtag = $add_top = ''; if(isset($vars['add'])) { global $_btn_addtop; $addtag = '<input type="hidden" name="add" value="true" />'; $add_top = isset($vars['add_top']) ? ' checked="checked"' : ''; $add_top = '<input type="checkbox" name="add_top" ' . 'id="_edit_form_add_top" value="true"' . $add_top . ' />' . "\n" . ' <label for="_edit_form_add_top">' . '<span class="small">' . $_btn_addtop . '</span>' . '</label>'; + $cmd = 'add'; + } else { + $cmd = 'edit'; } (中略) if (isset($vars['help'])) { $body .= $hr . catrule(); } else { $body .= '<ul><li><a href="' . - $script . '?cmd=edit&help=true&page=' . $r_page . + $script . '?cmd=' . $cmd . '&help=true&page=' . $r_page . '">' . $_msg_help . '</a></li></ul>'; } return $body; } (以降、省略) これで、追加(add)の時はadd で、それ以外はedit 固定で呼び出されれると思います。~ 記号を使っていないので、とりあえず htmlspecialchars はかけてません。~ ヘルプを呼び出すと、それまでの編集内容が消えるのはそのまま((チェックボックスに応じて、プレビューを押した時に、ヘルプの表示、非表示を切り替える。とでもしないと、これは直らないと思いますけど。))ですけど。 -- &new{2007-05-13 (日) 19:00:02}; #comment