開発日誌-20160517-別冊-ソースの入手 のバックアップの現在との差分(No.1)


はじめに


このWikiを編集するページのソースを読むと、タグ挿入ボタンをクリックしたときには

このWikiの編集ページで文字列を範囲選択し、タグ挿入のボタンをクリックすると、きちんと選択範囲に対応してタグが挿入され、カーソル位置もそのまま維持されます。私のブログ「徒然ガラケー」の編集ではそうはならないので、どうにかならないものかと調べてみました。

編集ページのソースを読んでみると、ボタンをクリックしたときには
pukiwiki_tag('size');

といった関数呼び出しが発生しています。

といった関数呼び出しが発生することが分かります。これの実体がどこにあるのをブラウザ越しに捜すのは骨が折れるので、ソースコードを入手してgrepしました。そのソース入手に苦労したので、ここにメモしておきます。

これの実体がどこにあるのをブラウザ越しに捜すのは骨が折れるので、ソースコードを入手してgrepしました。ソースの入手方法はちょっと煩雑なので、下記に詳述します。

結局どういうタグを書くべきなのかは、ぜんぶ調べ終わってから別のところに書きます。

結論から言うと、この関数の実体は

公式サイトは古くなっている


の2箇所で、どちらが呼ばれるのかは skin/default.js でブラウザを自動判別して決定しています。

公式サイトのダウンロードページから、1.4.7plus-u2-i18n rev1726というバージョンが入手できます。

gecko.jsでの実装


ところが、トップページを開くと、こんなことが書いてあります。

19 December, 2011
XSS脆弱性の修正 -- i18n

PukiWiki Plus!を使用して、特定のアクセスを行うとクロスサイトスクリプティングが発生する脆弱性が存在します。

PukiWiki Plus!を使用している方は、以下のファイルの差替をお願いいたします。

  • plugin/comment.inc.php(rev. 1815)

Gecko系(ポピュラーなブラウザでいうとFirefox、Chrome、Opera、Safariなど)では、
  • var t = document.getElementById('text1');
    ダウンロードページにあるバージョンは rev 1728 です。それより後から差替が必要になったことが分かります。

    …が、この差替ファイルはリンク切れになっています。ダウンロードページの「開発リリース」のリンクもリンク切れです。

のように入力欄オブジェクトを取得して、
  • t.selectionStart
  • t.selectionEnd

GitHubから入手しよう


という2つのプロパティを読み書きすることができます。入力されている文字列の全文は t.value で読み書きできるので、
  • 取得する際は、t.value.substring ( t.selectionStart, t.selectionEnd ) とすればOKです。
  • 選択範囲を差し替えるには、まず差替後の全文をt.value に (選択範囲より前の文字列) + (差替後の文字列)
    で、トップページをよくよく見てみると、こんなことが書いてあります。

05 March, 2012
githubに仮移行

githubに仮移行しました。

svnリポジトリ停止予定

2012/03/31 で svnリポジトリを停止予定です。また、2012/03/06 より svnリポジトリは断続的に停止することがありますので、あらかじめご了承ください。

ソースの入手方法


ここに書かれているアドレスを開くことで、やっと最新版が手に入ります。
  • UNIX系OSなどで、gitコマンドが使える場合は、
    git clone http://github.com/miko2u/pukiwiki-plus-i18n

  • とすれば、カレントディレクトリの下に展開されます。
  • 上記のページを普通のWebブラウザで開いて、「Download ZIP」というボタンをクリックしてもOKです。

きちんと修正されていることを確認する


ソースの所在地は次の通り:
  • 公式サイトのダウンロードページから、1.4.7plus-u2-i18n rev1726というバージョンが入手できます。
  • このページの末尾の「開発リリース」はリンク切れになっています。トップページには2011年12月19日の日付で「XSS脆弱性の修正─i18n」とありますが、その差替ファイルもリンク切れになっています。
  • ところが、そのトップページには2012年3月5日付で「githubに仮移行」とあり、そこに書かれているアドレスを開くと最新版が入手できます。
    • ファイル・フォルダ一覧から「plugin」フォルダをさがすと「XSS脆弱性の修正(JVN#76515037)」とあり、これをクリックすると、2011念12月17日に修正が行われていることが分かります。
    • Gitについてよくわかっていない人は「Download ZIP」をクリックしてzipファイルを落とし、それを解凍すればOKです。
      上記のアドレスをWebブラウザで開くと、関係のファイル・フォルダの一覧が出てきます。

まず、「plugin」というフォルダ名の右側にある「XSS脆弱性の修正(JVN#76515037)」という文字列をクリックすると、2011年12月17日に修正が行われていることが分かります。

さらに、「skin」フォルダの行にも「XSS脆弱性の修正」とあって、その行の右端には「2 years ago」とあるので、それも確認しておきましょう。「「XSS脆弱性の修正」の文字列をクリックすると、修正点が表示されます。

どこか変なコードですが(たぶん、2つめのlastIndexOfの引数は '?' じゃなくて '#' だと思う)、検証はまた後日にさせてください。