2010年12月31日金曜日

Pukiwikiでブックマークレットを紹介できるようにする

 通常のPukiwikiのページに「javascript:スクリプト」と直接書いてもリンクにならないし、[[ブックマークレットタイトル>javascript:スクリプト]]と書いてもjavascriptを実行できるリンクにはならない。
 誰でも自由いページを編集できるpukiwikiでデフォルトでそんな設定になっていたら、XSS対策も何もあったものではないからだ。自分の管理するpukiwikiで「file://」をリンクとして扱のと同じよう設定を入れ、「javascript:スクリプト」や「[[ブックマークレットタイトル>javascript:スクリプト]]」をリンクとして扱うようにすることはできるが、インターネットに公開しているサイトではリスクが大きくてする気にもならないだろう。
 悪意のある訪問者が、既存のリンクをjavascriptに書き換え、
「一見通常通りページを開くが、10秒後にスパムサイトがポップアップしてくる」とか、
「リンクをクリックするとスパムURLがついたコメントがPOSTされる」
なんてことを全ページにされたら、気が滅入るどころの話ではない。

とはいえPukiwikiページでブックマークレットを紹介したいニーズもあるので、比較的安全な「ブックマークレット用のリンクを別サイトに表示する」という方法を考えてみた。

 ブックマークレットを紹介したい人は、上記サイトにタイトル1行のスクリプトを入力し、「PukiWiki用リンクの作成」ボタンを押すと[[タイトル>上記サイトのURL?パラメータ]]のようなブランケット形式のリンクを作成し、それを自分のページに張ることで、読者にブックマークレットのリンクを示すことができる。
 読者が張られたリンクをクリックすると、紹介したいブックマークレットのリンクが上記サイトに表示されるというものだ。

読者がリンクをクリックすると下記のようなページが表示される。
このページで実際のブックマークレットのリンクと、確認用に整形されたスクリプトと、お気に入りに登録する方法を確認することができる。

ブックマークレットのリンクの下にはリンク中のjavascriptを見やすく整形したものが表示されるので、読者はその内容を確認したのちに登録することが可能となります。

javascriptを登録できて、このサイト自体のXSSのリスクはどうかという点を心配されるかも知れませんが、このサイトは上記の目的のみで使用されており、置かれているファイルもindex.htmlとjavascript整形用のbeautify.jsの2つだけとなっており、このサイトの改変などを行うことはできません。また、悪意のあるスクリプトを表示させることは可能ですが、このサイトでスクリプトを表示しても、ユーザがリンクをクリックしなければjavascriptは実行されないこと、ユーザは実行またはお気に入りに登録する前に、整形されたスクリプトの表示を確認できることで、リスクの低減になるかと考えています。

サイトの使い方

(1)事前にブックマークレットとするjavascriptを準備し、お気に入りのタイトルを決めておきます。
(2)サイト http://bookmarklet.dip.jp/ を開きます。
(3)「お気に入りタイトル」と「ブックマークレット用1行のjavascript」を入力し、「PukiWiki用リンク作成」を押す
※ここでjavascriptの簡単なチェックを行い、問題があればメッセージが表示されます。
(4)「確認用整形済みコード」で入力したjavascriptが意図したものか確認し、問題がなければ、「pukiwiki用リンク」に表示されたリンク文字列をコピーします。
(5)編集したいpukiwikiページを編集モードで開き、張り付けて使ってください。
(6)張り付けたリンクが正しく動くか確認する

0 件のコメント:

コメントを投稿