WordPressハックカテゴリーの投稿

WordPress 2.2 本家版リリース
本日、WordPress 2.2 本家版がリリースされました。当初、4月23日リリース予定でしたが、遅れていました。
2.0→2.1 ほど大きな変化はないですが、内部的には洗練されているようです。最大の目玉は Widgets サポートでしょうが、旅行ウェブログは Widgets を使うテーマじゃないので、あまり恩恵がありません……。テーマを改造して Widgets を使うようにしようかな。
でも、CVE-2007-2627 の脆弱性は直ってないようですし、管理画面でのページめくりにバグがある(*)のも直ってなかったので残念でした。
(*) 旅行ウェブログは、WP インストール URL とウェブログ URL を分離していますが、このとき、管理画面での「前ページ」「次ページ」のリンクがおかしくなります。インストール URL が http://example.jp/install/ で、ウェブログ URL が http://example.jp/weblog/ の場合、投稿一覧のページめくりが http;//example.jp/weblog/install/wp-admin/edit.php?paged=2 などとなってしまうのです (http;//example.jp/install/wp-admin/edit.php?paged=2 が正当)。
自力で修正しようと思い、link-template.php の next_posts_link(), previous_posts_link()
を見てみましたが、そこから呼ばれている get_pagenum_link()
を直す必要があり、これは難しそうなのでやめました。「いま管理画面にいるかどうか」をチェックする必要がありますが、うまく書ける自信がありません……。本家にバグ報告するのが素直でしょう。

WordPress プラグインにひそむ脆弱性
WordPress はテーマやプラグインが豊富に存在し、かつ、自作プラグインが作りやすことが魅力です。しかし、その「作りやすい」ことが災いして、脆弱性を含んだプラグインがけっこうあるようです。
プラグインをいろいろ試すのはいいことですが、できれば、ソースを見てみて、危険性がないことを確認した方がいいでしょう。もし簡単に脆弱性が見つかるようなら、絶対にそのプラグインは使ってはいけません。
XSS を見つけるには、$_GET や $_POST の内容をそのまま echo していないかどうかのチェックしてみます。echo $_GET['lat'];
なんてしていたら、それはモロ XSS があります。
SQL インジェクションはもっと簡単で、$wpdb->get_row
とか $wpdb->query
の引数にある SQL 文に、そのまま $_GET や $_POST を使ってないか調べます。例えば、以下のようなコードは危険です。
$wpdb->get_row("SELECT comment_content FROM $wpdb->comments WHERE comment_ID = ".$_GET['edit_this'])
もちろん、こんな簡単なチェックではすべての脆弱性を見つけることは無理ですが、現状では、この程度の点検でもやばいコードが見つかってしまいます……。
なお、プラグインに脆弱性を見つけたなら、それをいきなり公表してもいけません。まず作者に報告し、修正されるのを待つべきです。もはやメンテナンスされていないなら、(たぶん GPL なので) 自分で改善して配布するという手もあるでしょうか。

WordPress 用モブログ投稿スクリプト wp-mta 0.3.1 リリース
メールサーバーに仕込んで、携帯電話・PHS から WordPress ウェブログにモブログ投稿を行うスクリプト wp-mta のバージョン 0.3.1 をリリースしました。詳細説明は配布サイトを参照してください。
後継プラグインである Ktai Entry をご利用ください。
WordPress のアドレス (get_settings(’siteurl’)) と、ウェブログのアドレス (get_settings(’home’)) が違う環境において、画像タグの URI がおかしいバグを修正しました。
なお、画像回転すると EXIF が落ちる問題は修正していません。画像回転機能を使う場合は、本文に GPS URL を記載する運用でお願いします。
[追記 2008-04-30] wp-mta は開発を終了し、後継プラグインとして「Ktai Entry」を発表しました。今後は、Ktai Entry をご利用頂きますよう、お願いいたします。

WordPress 用 Google Maps プラグイン Lightweight Google Maps 1.01 リリース
WordPress 用 Google Maps プラグイン「Lightweight Google Maps」のバージョン 1.01 をリリースします。
今回はバグフィックス2点です。
- WordPress のアドレス (get_settings(‘siteurl’)) と、ウェブログのアドレス (get_settings(‘home’)) が違う環境において、固定ページの地図でマーカーが出ないバグを修正しました。
- Windows サーバーにおいて、固定ページの地図でマーカーが出ないバグを修正しました。
さて、次のバージョンでは、WordPress 2.1 以降において、ページテンプレートで the_content() の直前にコード挿入しなくてもプルダウンメニューが出るようにする予定です。

WordPress ME 2.1.3 で RSS, ATOM フィードが出ない
本家版に追随して、ME 版も今日きのう 2.0.10 および 2.1.3 がリリースされたのですが、なんと RSS, ATOM フィードが出ないという問題があります。
Apache のログをチェックしたところ、wpj_the_author()
関数が存在していなかったので、ME 2.1.2 の配布ファイルから抜き出して wp-includes/author-template.php ファイルの14行目あたり (the_author() 関数の後) に追記すれば直りました。
function wpj_the_author($deprecated = '', $deprecated_echo = true) { if ( $deprecated_echo ) echo wpj_utf8_encode(get_the_author()); return wpj_utf8_encode(get_the_author()); }
2.0.9, 2.1.2 には XSS 脆弱性があるので、早期にアップデートしましょう。

WordPress プラグイン Force Wave Dash 0.73 リリース
WordPress 用プラグイン「Force Wave Dash」のバージョン 0.73 をリリースしました。ダウンロードはリンク先の配布サイトから行えます。
今回は、PHP の内部コードが UTF-8 以外に設定されている場合でも動作するよう改良しています。具体的には mb_regex_encoding('UTF-8');
を実行させるようにしています。
そろそろバージョン 1.00 にしたいのですが、波ダッシュを UTF-8 のマルチバイト文字として記述している点を改良するまでお預けの予定です。現状では、エディターによって文字化けしてプラグインが破壊されやすいために、\x301c のような実体参照で記述したいのですが、どうもうまく動いてくれません……。最悪、現状のままバージョン 1.00 にするかも。

WordPress ウェブログにフォーラムを付ける
現在新規構築しているサイトにフォーラムをつけることにしました。phpBB のような別のフォーラムソフトを使う手もありますが、デザインを揃えるために WordPress 用のフォーラムプラグインを使ってみることにします。「WordPressのプラグイン一覧 › フォーラム」にある4つと bbPressを試してみました。
WP-Forumは、ゲスト投稿では名前を入力できないのでダメ。Simple Forum は、JavaScript がオンじゃないと投稿や返事できないのでダメ。RC Disscuss と XDForum はインストールがうまくいかず、どちらもフォーラム画面が呼び出せませんでした。ページスラッグとして「forum」や「xdforum」が設定されますが、その URI にアクセスしても「Not Found」となってしまいます。ちょっと難儀です。
なお、XDForum は、WordPress のバージョン番号をチェックしているので WordPress ME では「バージョン 0」と判定されてしまって初期画面すら出てきません。wp-includes/version.php をハックして “2.1.2ME” と変更してからインストールすると先には進むんですが……。
そして、bbPress は WordPress のユーザー登録 DB を共有するのはいいのですが、ユーザー登録必須となっているのが気に入りませんでした。ユーザー登録してなくても投稿させたいので。
けっきょく、よさげなものが見当らない状況です……。bbPress をハックして、ユーザー登録なしでも投稿できるようにしてしまおうか;-)

WordPress プラグイン Ktai Location 0.97 と Force Wave Dash 0.72 リリース
WordPress 用プラグイン「Ktai Location」のバージョン 0.97 および「Force Wave Dash」のバージョン 0.72 をリリースしました。ダウンロードはリンク先の配布サイトから行えます。
前者は、携帯電話等の位置情報を WordPress ウェブログに簡単に取り込む機能を追加します。後者は、「波ダッシュ問題」を解決するプラグインです。詳細な説明は配布サイトを参照してください。
今回のバージョンはともに、「Ktai Location は WordPress 2.1.2 でバグる?」「Ktai Location は ME 版だけバグる?」のバグを修正したものです。原因は、プラグインで投稿本文を修正した際、投稿キャッシュを更新していなかったからでした。プラグインが投稿本文を読み取るのは get_post()
関数を使っていますが、内部的に投稿キャッシュを使っています。投稿キャッシュを更新しなかったことで、後で実行されたプラグイン (Force Wave Dash) が古い本文 (==位置情報 URL を消す前) を参照してしまったのでした。
本文をいじってデーターベースに登録するとき、同時に投稿キャッシュもアップデートすることで、問題なく動作するようになりました。

Ktai Location は ME 版だけバグる?
旅行ウェブログで、携帯電話の位置情報が丸見えになってしまうバグは、修正したつもりでしたが、実は直ってなかったようです。今日からのリアルタイム旅行レポートでも再発しています。
位置情報は登録されているので、位置情報 URL を隠す処理をした投稿文をデーターベースに上書きする処理ができてないわけです。
「正常動作した」と思ったのは、別に動かしているテスト用サイトで、これは WordPress 本家版の 2.1.2 での確認でした。RSS/Atom フィード以外は本家版と ME 版とでほとんど違いがないはずですが、ME 版だけうまく動かないのは謎です……。
手元の MacBook に WordPress ME 2.1.2 をインストールしてテストしてみたところ現象が確認できたので、ローカルでバグ取りができるわけで、時間の合間を見てバグ取り作業をやってみます。
[追記 2007-03-10 13:45] いろいろ試してみたところ、拙作の「Force Wave Dash」が原因ぽいです。これを無効にしてやると、本家版、ME 版ともに位置情報 URL は隠されます。逆に、有効にしてみると、本家版でも位置情報 URL が残ってしまいます。つまり、Force Wave Dash をいじれば直るかも。

WordPress プラグイン Ktai Location 0.96 リリース
WordPress ウェブログで、記事に携帯電話等の位置情報を埋め込めるプラグイン「Ktai Location」のバージョン 0.96 をリリースしました。ダウンロードは上記リンクの配布サイトから行ってください。
今回は、位置情報 URL の扱いにバグがあったのを修正しています。昨日の不具合を修正しようとソースをじっくり見ていると発見したものです。
これでしばらく運用して問題がなければ、そのままバージョン 1.00 とする予定です。