../

Wikiページにhtmlタグを埋め込む

PukiWiki公式ページで自作プラグインofficial:自作プラグイン/include_template.inc.phpofficial:自作プラグイン/include_module.inc.phpを発表していますkahataと申します。

wikiページへのhtmlタグの埋め込み許可については脆弱性/securityの点で議論のあるところですが、その議論を別にしてページにちょっとしたhtmlタグの埋め込みができると小回りが利いて大変便利です。

現にMediaWikiではhtmlタグの埋め込みを可能にする設定が可能で、またextensionと呼ばれる拡張機能はhtml(xml)タグで搭載する仕様になっています。さらにrunphpという、php生コードを頁に埋め込む拡張機能まであります。そこで、pukiwikiでhtmlタグを埋め込む拡張を試みました。(プラグインは色々あるようですが....)
こうした拡張は本来html.php、convert_html.phpでやるべきですが、codingが難しく大幅な改造になるのでここではちょっとしたフックで行っています。

原理は非常に簡単で、lib/pukiwiki.phpの convert_html(get_source($base)); の直前でタグ部分をhtml変換に影響されない識別子に一旦置き換え、convert_html後にタグ部分をしかるべきコードに書き戻すものです。

pluginも作成していますが、何分出来たてのほやほやで初心者が<html><php>を多用した場合や悪用された場合どんな危険があるかわからず、また公式サイトではフクロダタキに会うのが目に見えていますのでこちらのサイトで紹介させて頂きます。

開発者の方々の忌憚ないご意見を頂戴できれば幸いです。

インストール 以下のファイルを適当な場所(例えばlib)に置く

tag_Hook.class_0.007.zip (以下のコメントのように変更しました)

変更箇所

これで全てのページでhtmlタグの使用とphpコードの埋め込みが可能になります。

尚htmlタグ,phpコードの埋め込みが危険な場合は、上記$tagHook変数で必要なtagのみに限定することができます。

この方法で色々な<tag>の機能の拡張が可能ですが、ここでは実験的にブロック型,インライン型プラグイン埋め込みをやっています。

コメント

コメントをお待ちしています。


*1 revision 0.006で同一ページ混在の不具合修正
*2 行頭の#tag_Hookエラーは当方のpluginと競合が原因と判明しました。行頭に#tag_hookが露見するのも不恰好なのでこのままにしておきます。
*3 wikiのpageはsourceを誰でも閲覧できるので、完全に保護するには隠蔽されたsourceをインクルードするしかないのでは・・・?? そうしないと凍結しても新規ページにコピーペーストされるとどんな悪用も可能です。
*4 失礼しました。PKWK_SAFE_MODEがあったのですね。個人利用では使わないものですから、うっかりしてました。
*5 上に述べた原理でconvert_html()を改造すればプラグイン内でも作動することを確認していますが、公開の予定はありません
*6 htmlやphpコードを含むページのincludeは、拙作official:自作プラグイン/include_template.inc.phpやsonotsさんのofficial:自作プラグイン/htmlinsert.inc.phpなどを利用することになります
*7 PukiWikiへの正規採用ということではなく言わばマニア・中級向けTipsと考えています。-- 文字通り「ちょっと便利に」
*8 あとSKIN_FILEを使用している部分は適宜変更が必要です。ここは開発サイトなので端折っていますがgrepなどして対処して下さい
*9 $tagHooks変数も追加変更すること
*10 このページの例は、ある程度プログラムのわかる中級者を対象として一種のプロトタイプを示しています。一般者/初心者がそのままコピーして使えるコードにはなっていませんのでご注意ください。
ご利用に当っては各コードを理解した上で、各自さらに改良・工夫をお願いします。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-26 (火) 03:48:18
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.257 sec.

SourceForge