2008年6月09日の投稿

2008-06-09
晴れ一時雷雨

非標準 URL で不正なリダイレクト

ゆりこ による 04:07:31 の投稿
カテゴリー: WordPressハック
タグ: , ,

Ktai Style を WordPress 2.3 以降で使った場合、「標準 URL (canonical URL) としてリダイレクトする飛び先が不正になる」というバグがあることが分かりました。例えば、http://example.jp/?cat=3 をリクエストしたら http://example.jp/category/living/ に正規化される場合、Ktai Style では http://example.jp/://example.jp/category/living/ となってしまいます。当然 Not Found になります。

WordPress はパーマリンクを設定していてもクエリー文字列を使った URL でアクセスできるため、WordPress 2.3 以降、パーマリンクを使った URL を強制させるべく、非標準の URL を (クエリー文字列を使った URL など) を標準 URL (パーマリンクを使った URL など) にリダイレクトする仕組みがあります。例えば、living カテゴリー (ID:3) のアーカイブは http://example.jp/category/living/ が標準 URL となります。クエリー文字列を使った http://example.jp/?cat=3 でもアクセスできますが、これは前者の URL にリダイレクトされるのです。しかし、Ktai Style では、「URL のホスト部分を削除する」というフィルターを入れているため、その副作用で「スキーム文字列」 (http の部分) だけ落ちてしまい、「://example.jp/category/living/」がリダイレクト先になってしまいます。この場合、カレント URL が補われて「http://example.jp/://example.jp/category/living/」にジャンプしようとするわけです。

MT4i みたいに、カテゴリーのポップアップメニュー (プルダウンメニュー) を付けたい」というカスタマイズをした場合、プルダウンで選んだカテゴリーアーカイブは非標準の URL のため、標準 URL にリダイレクトされます。カスタマイズを紹介した時点では問題なく動作していたはずなので、それ以後のバージョンアップで不具合が出てしまったようです。

一応対策コードを作ってみましたが、redirect_canonical() が出力するリダイレクト先 URL が不正だったら直すという対処療法的なものです。これだと、対策コードが想定しない不正な URL が来た場合はそのまま通ってしまいます。といって、「URL のホスト部分を削除するフィルター」をなくしてしまうとパケット削減効果が落ちてしまいます。「携帯電話では非標準の URL がリクエストされることは少ない」と考えて、この対策で進めましょうか。

さほど致命的なバグだとは思っていませんので、これの修正を入れたバージョン 1.36 のリリースは、しばらくお待ちください。6月中には出す予定です。Ktai Style 1.50-test3 の方は、redportal テーマに PHP 構文エラーがあるという致命的なバグがあるので、早期に修正版を出したいのですが、他にも調整したい部分がありますので、数日お待ちください。

携帯でコメントできない

ゆりこ による 05:03:58 の投稿
カテゴリー: WordPressハック
タグ: ,

なんと、Ktai Style 1.35 および 1.50-test3 には「携帯からコメントできない」(白紙画面ないし PHP エラー表示) という問題があることが分かりました。利用者の方が見つけられたのですが、できれば、当サイトないしはWP 日本語フォーラムで報告して頂けるとありがたかったです。

原因は、comments-post.php の 93 行目で、$allowedposts 配列に絵文字用属性の localsrc, alt を追加する部分です。従来は単に代入していたのですが、それだとすでに $allowedtags['img'] に配列が存在した場合に消えてしまうので、+= 演算子によって「追加」にしました。しかし、これは PHP の構文エラーになっていたのでした。

この問題はテスト時に発見していたので、リリース時は元通り代入に戻したつもりでしたが、直っていなかったようです……。1.35 と 1.50 の2系統あって、comments-post.php を揃えるとき古いファイルで新しいのを上書きしてしまったのかもしれません。「直したはずなのに直ってない」というのは一番嫌ですね……。

これは重大な問題なので、Ktai Style 1.36 および 1.50-test4 は、できれば今日中に出したいと思います。

シティオいよいよ終了

ゆりこ による 16:09:41 の投稿
カテゴリー: モバイル・携帯電話
タグ: , ,

ドコモが、シティオ (シティホン) サービスが今月末で終了することをアナウンスしました。2007年4月にサービス終了のお知らせが出ていましたが、今月で終了するので改めて告知した格好です。ケータイ Watch の記事によると、東名阪での契約者数はなんと 6,700 件しかない(!)そうです。

シティオは通話料金が安いのですが、東名阪以外で使えないし、iモードに対応してなかったんですよね。通話料金を取るか、エリア・iモードを取るかというと、今だと後者を選ぶ人が多いということでしょう。2000年ごろは携帯電話の料金が一番安かった頃ではないでしょうか。今はそれよりだいぶ上がってしまいました。

携帯対応プラグイン Ktai Style バージョン 1.36 リリース

Ktai Style 1.32 サンプル画面

絵文字対応の WordPress 携帯対応プラグイン「Ktai Style」の安定版バージョン 1.36 をリリースいたしました。1.35 からの変更点は次の通りです。

  • Ktai Style 1.35 で、携帯からコメントすると白紙画面もしくは PHP エラー画面になってしまう不具合を修正しました (Ktai Style 1.35 のみ存在するバグ)。
  • Ktai Style 1.35 で、画像をインライン表示させているとき、imagecreatefromjpeg() 関数などが存在しないサーバーでは、投稿がうまく表示されないことがある不具合を修正しました (Ktai Style 1.35 のみ存在する不具合)。
  • WordPress 2.3 以降でパーマリンク設定をしている場合、クエリー文字列つき URL でアクセスしたとき、本来の URL (パーマリンクを使った URL) へのリダイレクトが不正になる不具合を修正しました。例えば、PC では、http://example.jp/?cat=3 にアクセスすると http://example.jp/category/living/ にリダイレクトされる場合、携帯では http://example.jp/://example.jp/category/living/ という不正な URL にジャンプしていました。
  • 作成者権限しかないユーザーがコメント編集した場合、絵文字要素 (<img localsrc=”NNN” /> フォーマットの XHTML タグ) が消えてしまう不具合を修正しました。
ダウンロード: ktai_style136.tar.bz2 (198.3 KB)
バージョン 1.40 をリリースしました。

今回は、携帯でコメントできないという重大バグに対応したものです。サイト運営者・閲覧者のみなさんにはご不便をおかけしてしまいました。申し訳ありません。その他にもバグや不具合を発見したため、直しています。なんか 1.35 はボロボロでしたね……。

Ktai Style 1.50-test4 配布

ゆりこ による 19:17:42 の投稿
カテゴリー: WordPressハック
タグ: ,

Ktai Style の次期バージョンのテスト版 (その4) を配布いたします。あくまで製作中のバージョンですので、新機能に興味ある方のみご利用ください。テスト版その3からの変更点は以下の通りです。

  • 携帯からコメントすると白紙画面もしくは PHP エラー画面になってしまう不具合を修正しました (テスト版その3のみ存在するバグ)。
  • 画像をインライン表示させているとき、imagecreatefromjpeg() 関数などが存在しないサーバーでは、投稿がうまく表示されないことがある不具合を修正しました (テスト版その3のみ存在する不具合)。
  • WordPress 2.3 以降でパーマリンク設定をしている場合、クエリー文字列つき URL でアクセスしたとき、本来の URL (パーマリンクを使った URL) へのリダイレクトが不正になる不具合を修正しました。例えば、PC では、http://example.jp/?cat=3 にアクセスすると http://example.jp/category/living/ にリダイレクトされる場合、携帯では http://example.jp/://example.jp/category/living/ という不正な URL にジャンプしていました。
  • 作成者権限しかないユーザーがコメント編集した場合、絵文字要素 (<img localsrc=”NNN” /> フォーマットの XHTML タグ) が消えてしまう不具合を修正しました。
  • redportal テーマの index.php テンプレートで PHP 構文エラーが起きてしまい、コンテンツが表示できない不具合を修正しました。
ダウンロード: ktai_style150-test4.tar.bz2 (233.3KB)
バージョン 1.40 ベータ版その1を配布しています。

今回はテスト版その3でのバグフィックスです。redportal テーマが使えない携帯電話からコメントできないという、もうボロボロの状況だったのが改善されました。その他、ページ分割のコードを operators/services.php から shrinkage.php に移動したり、テンプレートの余分なタブを除去するコードを改善したりしていますので、その部分にバグが残っている可能性はゼロではありません。

デジタルスタジオの WP MOBILE を使っている人がいた

ゆりこ による 21:43:06 の投稿
カテゴリー: WordPressハック
タグ: , , , ,

当サイトで問題点を何回か指摘している、デジタルスタジオ製のモバイル対応プラグイン「WP MOBILE」ですが、実際に使っている人を見つけました (当該サイトへのリンクはありません)。見つかった理由は、当該サイトを Safari で見ようとして「ユーザagentがサーバーに書いてないですのでアクセスができないです」という表示になったからです。こりゃいかんと思って Firefox で閲覧して、コメントしようとしましたが、携帯対応に関する投稿はありませんでした。しかし、Safari に言及している記事があったので、そこでコメントを書いておきました。WP MOBILE はイケてないこと、Ktai Style ないし MobilePress がオススメであること、Mobile Eye+エロ広告が出たりページナビゲーションにバグがあるのでやめた方がよいことなどです。

で、さきほどそのサイトを確認してみると、Safari で見えるようになっていました。さっそく対応されてすばらしい、と思ったのも束の間、事もあろうに Mobile Eye+ に切り替えられていました!! しかも URLGATE はオンのままです!! 「おすすめしません」と書いてあるプラグインをわざわざ採用するのは、わたしに対する嫌がらせですよね ;-) まあ、Ktai Style は PHP5 を要求しますし、MobilePress は Mobile Eye+ に比べて機能が少なく、short_open_tag が off のサーバーでは動作しないため、消去法で Mobile Eye+ が残った可能性はありますが、それならばせめて URLGATE オフにしてもらいたかったです。わたしの書いた「URLGATE がやばい」という投稿までは見られていないのでしょう……。

あまり悪口は言いたくないですが、「そもそも WP MOBILE を選ぶ」時点でセンスおよび情報収集能力が少し劣るような気がします :-P そもそも、Google で「WordPreess モバイル」と検索すると、WP MOBILE プラグインのページが上位に来てしまうのが問題なのですが。わたしの「WP MOBILE 叩き記事」が上位に来るようにがんばらないと ;-);-)

[追記] もう1つ、WP MOBILE 利用サイトを見つけました。こちらはコメント先として適切な投稿がなかったため、コンタクトフォームから問合せしています。今度はよい返事があることを期待したいですね。

[さらに追記] ちなみに、この現象 (Safari で見られない) については、だいぶ前にデジタルスタジオに報告ずみです。Press9.net で稼動しているバージョンでは改善されているようですが、一般向け配布版はバージョンアップされていないのです。Press9 は一部ウェブログで WordPress 2.5 になっていて、プラグインの方も 2.5 対応されていると推測できるのに、一般公開しないのは残念です。わたしに叩かれるのが嫌なのかも ;-) でも、オープンソースってのはそういうものですよね。

コメントスパム対策プラグイン製作中

ゆりこ による 22:57:12 の投稿
カテゴリー: WordPressハック
タグ: , , ,

WordPress プラグインコンペティション用にコメントスパム対策プラグインを作っていますが、当サイトで稼動させてみることにしました。実は旅行記の方で動かしていましたが、そちらはトラックバックがめったに来ないので運用テストにならないのです ;-)

すでに発表している「短かいコメントを拒否するプラグイン Reject Short Comments」とは違う発想のプラグインで、コメントやトラックバック用 URL に _wpnonce引数を付けるという仕組みです。WordPress はコメントやトラックバック受け付け URL が決め打ちのため、スパマーにとっては元記事を見ずにいきなりスパムを送り付けることが可能です。これを防ぐため、トラックバックURLをランダム化したり、コメントフォームの隠しフィールドとして _wpnonce を入れるという対策を行うものです。名前は安直に「nonce, please!」とする予定です。

この対策は万全なものでなく、あくまで「Akismet をできるだけ起動しなくてすむ」ようにするためものです。このため、Akismet 等、他のプラグインと併用が推奨です。正直なところ、このプラグインの実装は WordPress コアに取り込まれてもおかしくないと思っているぐらいです ;-)

まだドキュメントが書けていないので公開はできませんが、近日中にドキュメントを書いて公開する予定です。コンペの規約で、プラグインの紹介は投稿ではなく固定ページで行うこと、となっているので、当サイトで固定ページを増やす方向で検討したいと思います。他のプラグインの紹介も固定ページを作った方がいいのかな??

この手法の問題点は、キャッシュプラグインと相性が悪いということです。_wpnonce の値は半日ごとに変化するため、キャッシュが半日以上有効な場合、すでに無効となった _wpnonce を含むトラックバック URI が表示される可能性があります。したがって、キャッシュプラグインを使う場合は、キャッシュの有効期限を半日未満にしないといけないです。1/4 日 (6時間) 未満というのが安全でしょうか。

[追記] リリースしました。