自作プラグイン/iframe_ref.inc.php
の編集
Top
/
自作プラグイン
/
iframe_ref.inc.php
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
Wikiを試したい方へ:
「この」Wikiは、
PukiWiki
のための公式Wikiです。
テスト書き込みなどは
お試しサイト
https://pukiwiki.osdn.jp/_trial/
をご利用ください
** iframe_ref.inc.php [#w32e75ab] |RIGHT:100|LEFT:360|c |~サマリ|添付ファイルをiframe内表示する| |~リビジョン|0.2| |~対応バージョン|1.4.6| |~投稿者|[[h1suzuki]]| |~投稿日|&new{2006-06-10 (土) 23:13:08};| ***概要 [#e69b76d0] PukiWikiに添付されたファイルはリンクや張り込み画像として表示できますが、iframe内に表示するプラグインを作りました。 PukiWikiにぺたぺた色々貼りたいけど、wikiで書き直すのは面倒。Officeで作ったhtmlや昔のHPのhtmlファイル、べたテキストをそのままwikiページに貼り付ける事ができます。(他に同様のプラグインありましたらご容赦ください) ライセンスはGPL2です。 #contents **ダウンロード [#gd84476c] 以下のソースをファイルにコピペして、PukiWikiのpluginディレクトリに iframe_ref.inc.php という名前で保存してください。read権がついている必要があります。 ***ソース [#meaf5adf] <?php ////////////////////////////////////////////////////////////////////// // iframe_ref.inc.php // by h1suzuki // 添付のファイルを <iframe>...</iframe> 内に表示する。 // [更新履歴] // 2006-06-06 version 0.1 [初版] // 2006-06-10 version 0.2 widthなどのオプションを扱えるようにする define('PLUGIN_IFRAME_REF_USAGE', '#iframe_ref(fname,[width,height,mwidth,mheight,border])'); define('PLUGIN_IFRAME_REF_MIME_CHECK',0); function plugin_iframe_ref_convert() { global $vars; if (func_num_args()<1) return PLUGIN_IFRAME_REF_USAGE; $args = func_get_args(); // sanity checks. $filename = UPLOAD_DIR.encode($vars[page]).'_'.encode($args[0]); if (!is_readable($filename)) return htmlspecialchars($args[0]). ' is not found.'; if (PLUGIN_IFRAME_REF_MIME_CHECK && extension_loaded('mime_magic')) { if (is_readable('mime_magic.magicfile')) { if (!preg_match('/html\/.*$/', mime_content_type($fname))) return ' is not a html file.'; } } $w = "90%"; $h = "300"; $mw = "0"; $mh = "0"; $b = "0"; if (!is_null($args[1]) && ereg("[0-9]{1,3}%?",$args[1])) $w = $args[1]; if (!is_null($args[2]) && ereg("[0-9]{1,3}%?",$args[2])) $h = $args[2]; if (!is_null($args[3]) && ereg("[0-9]{1,2}",$args[3])) $mw = intval($args[3]); if (!is_null($args[4]) && ereg("[0-9]{1,2}",$args[4])) $mh = intval($args[4]); if (!is_null($args[5]) && ereg("[0-1]",$args[5])) $b = intval($args[5]); // echo "w=",$w,",h=",$h,",mw=",$mw,",mh=",$mh,",b=",$b; require_once(PLUGIN_DIR.'ref.inc.php'); $param = plugin_ref_inline($args[0],"noicon","noimg"); $param = str_replace("<a href=", "<iframe width=\"".$w."\" height=\"".$h."\" ". "frameborder=\"".$b."\" ". "marginwidth=\"".$mw."\" marginheight=\"".$mh."\" ". "lang=\"ja\" src=",$param); $param = str_replace("</a>","</iframe>",$param); return $param; } ?> **使い方 [#h3b9b49f] ***書式 [#g5079ea6] #iframe_ref(添付ファイル名[,width,height,mwidth,mheight,border]) -添付ファイル名 ~PukiWikiのページに添付したファイル名を指定します。 -オプション --''width'' ~添付ファイルをインラインで表示する iframe ウィンドウの幅を指定します。70%など割合指定が可能です。~ --''height'' ~添付ファイルをインラインで表示する iframe ウィンドウの高さを指定します。30%など割合指定が可能です。~ --''mwidth'' ~添付ファイルをインラインで表示する iframe ウィンドウ内のマージン幅を指定します。~ --''mheight'' ~添付ファイルをインラインで表示する iframe ウィンドウのマージン高さを指定します。~ --''border'' ~添付ファイルをインラインで表示する iframe ウィンドウのボーダーを0で非表示、1で表示します。 **使い方 [#rbc220eb] tenpu.htmlを添付ファイルとしてページに添付後、 #iframe_ref(tenpu.html) もしくは #iframe_ref(tenpu.html,100%,300,0,0,1) などで iframe ウィンドウ内に添付ファイル tenpu.html の内容がインライン表示されます。 ***コメント [#u7550855] -投稿のルールがぱっと見つけられませんでした(ポインター教えてもらえたら勉強して再投稿します。) - 自作プラグイン/1 より移動しました。 -- &new{2006-06-10 (土) 23:14:52}; - 移動、ありがとうございます。お手数おかけします。m(__)m -- [[h1suzuki]] &new{2006-06-12 (月) 00:53:24}; - ''危険です''。これは、&ref(http://example.com); が可能なので &iframe_ref(http://example.com); も可能ですよね。悪意のあるコードをもったサイトを指定されると危険になると思います。[[自作プラグイン/iframe.inc.php]] のように限定する必要があります。また、http な URL だけでなく、自由にファイルをアップロードできる状況では、悪意をもったHTMLファイルをアップロードされて iframe_ref されると危険になると思います。この本家サイトではファイル添付の脆弱性を完全に消去できないため、中止されていたと思いますが、iframe_ref があるとそれどころではなくなってしまいます。 -- &new{2007-01-14 (日) 04:28:57}; - コメントありがとうございます。添付ファイルのmagicを見てるので&iframe_ref(http://example.com);はできなさそうに思います。当然、スパム的なhtmlを添付すればスパム的な表示が可能になりますが、それは本プラグインの問題ではない(HTMLを添付する事自体の問題)という気がしますがいかがでしょう。 -- [[h1suzuki]] &new{2008-01-16 (水) 10:56:02}; - 勿論、そういう考え方もあるでしょう。悪い奴が悪いことをすることに関して、あなたに責任はありません。ですが、もうちょっと考えてみたらどうでしょうか?例えば、「ファイル添付が管理者に制限されている」とか、「そのページに編集権限が設定されている」場合にのみ有効に動作するようにしただけで、かなり安全になります。 -- &new{2008-01-16 (水) 22:07:45}; - もし「悪い奴が~」的な考え方なら、元々magicは見ないのでは?ここでは、人の責任分担ではなくモジュールの責任分担を言っています。編集権限などの管理と本プラグインが連携してはどうか?という提案ですね。やるとすれば「ページが編集可能な場合は動作しない。他ページの添付ファイルは引用できない。」といった感じでしょうか。 -- [[h1suzuki]] &new{2008-01-23 (水) 14:27:14}; - 何かちょっと誤解がある?プラグインがmagic見る見ないはあまり本質的な問題ではないと思いますが。「ページが編集可能な場合は動作しない」((だと、ただ編集可能な状態では動作しなくなるだけで、安全性は全く変わらない))ではなく、適切に編集制限がなされたページ、添付制限がなされた上での添付ファイル対象のみで動作可能とするのが妥当な線でしょう。何故ならば、そのページの内容は特定者のみが編集可能で、適切な制限下の添付ファイルから差し込まれる内容は(少なくとも、そのPukiWikiの設置者と同程度には)信頼できるからです。「他ページの添付」については、同じ論理でそのページへの添付権限が適切に管理されているかどうか(悪意を持った不特定第3者に差し替えされる危険性の有無)が問題で、他ページかどうかはあまり意味が無いと思います。 -- &new{2008-01-23 (水) 23:27:59}; - 少し誤解しているかもしれませんので、その場合はすみません。「ページが編集可能な場合は動作しない」は「凍結したページであれば、内容を承認して凍結する権限を行使した意味で安全でる」と考えました。モデルがよく分からなくなってきたのですが、ページは基本的に誰でも編集可能で、適切と判断されれば管理権限を持った人が凍結して承認するイメージでいました。でも、それだとプレビューができないですね。。。もう少し考えてみます。コメント、ありがとうございます。 -- [[h1suzuki]] &new{2008-01-24 (木) 13:17:00}; //#comment
** iframe_ref.inc.php [#w32e75ab] |RIGHT:100|LEFT:360|c |~サマリ|添付ファイルをiframe内表示する| |~リビジョン|0.2| |~対応バージョン|1.4.6| |~投稿者|[[h1suzuki]]| |~投稿日|&new{2006-06-10 (土) 23:13:08};| ***概要 [#e69b76d0] PukiWikiに添付されたファイルはリンクや張り込み画像として表示できますが、iframe内に表示するプラグインを作りました。 PukiWikiにぺたぺた色々貼りたいけど、wikiで書き直すのは面倒。Officeで作ったhtmlや昔のHPのhtmlファイル、べたテキストをそのままwikiページに貼り付ける事ができます。(他に同様のプラグインありましたらご容赦ください) ライセンスはGPL2です。 #contents **ダウンロード [#gd84476c] 以下のソースをファイルにコピペして、PukiWikiのpluginディレクトリに iframe_ref.inc.php という名前で保存してください。read権がついている必要があります。 ***ソース [#meaf5adf] <?php ////////////////////////////////////////////////////////////////////// // iframe_ref.inc.php // by h1suzuki // 添付のファイルを <iframe>...</iframe> 内に表示する。 // [更新履歴] // 2006-06-06 version 0.1 [初版] // 2006-06-10 version 0.2 widthなどのオプションを扱えるようにする define('PLUGIN_IFRAME_REF_USAGE', '#iframe_ref(fname,[width,height,mwidth,mheight,border])'); define('PLUGIN_IFRAME_REF_MIME_CHECK',0); function plugin_iframe_ref_convert() { global $vars; if (func_num_args()<1) return PLUGIN_IFRAME_REF_USAGE; $args = func_get_args(); // sanity checks. $filename = UPLOAD_DIR.encode($vars[page]).'_'.encode($args[0]); if (!is_readable($filename)) return htmlspecialchars($args[0]). ' is not found.'; if (PLUGIN_IFRAME_REF_MIME_CHECK && extension_loaded('mime_magic')) { if (is_readable('mime_magic.magicfile')) { if (!preg_match('/html\/.*$/', mime_content_type($fname))) return ' is not a html file.'; } } $w = "90%"; $h = "300"; $mw = "0"; $mh = "0"; $b = "0"; if (!is_null($args[1]) && ereg("[0-9]{1,3}%?",$args[1])) $w = $args[1]; if (!is_null($args[2]) && ereg("[0-9]{1,3}%?",$args[2])) $h = $args[2]; if (!is_null($args[3]) && ereg("[0-9]{1,2}",$args[3])) $mw = intval($args[3]); if (!is_null($args[4]) && ereg("[0-9]{1,2}",$args[4])) $mh = intval($args[4]); if (!is_null($args[5]) && ereg("[0-1]",$args[5])) $b = intval($args[5]); // echo "w=",$w,",h=",$h,",mw=",$mw,",mh=",$mh,",b=",$b; require_once(PLUGIN_DIR.'ref.inc.php'); $param = plugin_ref_inline($args[0],"noicon","noimg"); $param = str_replace("<a href=", "<iframe width=\"".$w."\" height=\"".$h."\" ". "frameborder=\"".$b."\" ". "marginwidth=\"".$mw."\" marginheight=\"".$mh."\" ". "lang=\"ja\" src=",$param); $param = str_replace("</a>","</iframe>",$param); return $param; } ?> **使い方 [#h3b9b49f] ***書式 [#g5079ea6] #iframe_ref(添付ファイル名[,width,height,mwidth,mheight,border]) -添付ファイル名 ~PukiWikiのページに添付したファイル名を指定します。 -オプション --''width'' ~添付ファイルをインラインで表示する iframe ウィンドウの幅を指定します。70%など割合指定が可能です。~ --''height'' ~添付ファイルをインラインで表示する iframe ウィンドウの高さを指定します。30%など割合指定が可能です。~ --''mwidth'' ~添付ファイルをインラインで表示する iframe ウィンドウ内のマージン幅を指定します。~ --''mheight'' ~添付ファイルをインラインで表示する iframe ウィンドウのマージン高さを指定します。~ --''border'' ~添付ファイルをインラインで表示する iframe ウィンドウのボーダーを0で非表示、1で表示します。 **使い方 [#rbc220eb] tenpu.htmlを添付ファイルとしてページに添付後、 #iframe_ref(tenpu.html) もしくは #iframe_ref(tenpu.html,100%,300,0,0,1) などで iframe ウィンドウ内に添付ファイル tenpu.html の内容がインライン表示されます。 ***コメント [#u7550855] -投稿のルールがぱっと見つけられませんでした(ポインター教えてもらえたら勉強して再投稿します。) - 自作プラグイン/1 より移動しました。 -- &new{2006-06-10 (土) 23:14:52}; - 移動、ありがとうございます。お手数おかけします。m(__)m -- [[h1suzuki]] &new{2006-06-12 (月) 00:53:24}; - ''危険です''。これは、&ref(http://example.com); が可能なので &iframe_ref(http://example.com); も可能ですよね。悪意のあるコードをもったサイトを指定されると危険になると思います。[[自作プラグイン/iframe.inc.php]] のように限定する必要があります。また、http な URL だけでなく、自由にファイルをアップロードできる状況では、悪意をもったHTMLファイルをアップロードされて iframe_ref されると危険になると思います。この本家サイトではファイル添付の脆弱性を完全に消去できないため、中止されていたと思いますが、iframe_ref があるとそれどころではなくなってしまいます。 -- &new{2007-01-14 (日) 04:28:57}; - コメントありがとうございます。添付ファイルのmagicを見てるので&iframe_ref(http://example.com);はできなさそうに思います。当然、スパム的なhtmlを添付すればスパム的な表示が可能になりますが、それは本プラグインの問題ではない(HTMLを添付する事自体の問題)という気がしますがいかがでしょう。 -- [[h1suzuki]] &new{2008-01-16 (水) 10:56:02}; - 勿論、そういう考え方もあるでしょう。悪い奴が悪いことをすることに関して、あなたに責任はありません。ですが、もうちょっと考えてみたらどうでしょうか?例えば、「ファイル添付が管理者に制限されている」とか、「そのページに編集権限が設定されている」場合にのみ有効に動作するようにしただけで、かなり安全になります。 -- &new{2008-01-16 (水) 22:07:45}; - もし「悪い奴が~」的な考え方なら、元々magicは見ないのでは?ここでは、人の責任分担ではなくモジュールの責任分担を言っています。編集権限などの管理と本プラグインが連携してはどうか?という提案ですね。やるとすれば「ページが編集可能な場合は動作しない。他ページの添付ファイルは引用できない。」といった感じでしょうか。 -- [[h1suzuki]] &new{2008-01-23 (水) 14:27:14}; - 何かちょっと誤解がある?プラグインがmagic見る見ないはあまり本質的な問題ではないと思いますが。「ページが編集可能な場合は動作しない」((だと、ただ編集可能な状態では動作しなくなるだけで、安全性は全く変わらない))ではなく、適切に編集制限がなされたページ、添付制限がなされた上での添付ファイル対象のみで動作可能とするのが妥当な線でしょう。何故ならば、そのページの内容は特定者のみが編集可能で、適切な制限下の添付ファイルから差し込まれる内容は(少なくとも、そのPukiWikiの設置者と同程度には)信頼できるからです。「他ページの添付」については、同じ論理でそのページへの添付権限が適切に管理されているかどうか(悪意を持った不特定第3者に差し替えされる危険性の有無)が問題で、他ページかどうかはあまり意味が無いと思います。 -- &new{2008-01-23 (水) 23:27:59}; - 少し誤解しているかもしれませんので、その場合はすみません。「ページが編集可能な場合は動作しない」は「凍結したページであれば、内容を承認して凍結する権限を行使した意味で安全でる」と考えました。モデルがよく分からなくなってきたのですが、ページは基本的に誰でも編集可能で、適切と判断されれば管理権限を持った人が凍結して承認するイメージでいました。でも、それだとプレビューができないですね。。。もう少し考えてみます。コメント、ありがとうございます。 -- [[h1suzuki]] &new{2008-01-24 (木) 13:17:00}; //#comment
テキスト整形のルールを表示する