タグ別アーカイブ: pingback

プラグインなしから発想するWordPressセキュリティ – IP Geo Blockの更新告知

昨年末、一晩で15000余りの パスワード辞書によるクラッキング を受けました。その時のログを分析してみて改めて思ったのは、「これだけランダムで長けりゃ大丈夫」的なパスワードも、「漏れたら終わり」って事です。

「ランダムで長いパスワード」をアカウント毎に頻繁に変えるのは面倒なワケで、長い間変えずに使い続けと、漏洩時のリスクが極めて高くなるってことだと思います。

おっと、何も パスワードの定期変更は必要か の議論へ乱入しようというワケじゃありません。

IPアドレスのジオロケーション情報を元に海外からの投稿を弾くスパム対策プラグイン IP Geo Block に、wp-login.phpwp-admin/admin.phpxmlrpc.php へのアクセスを遮断するセキュリティ機能、さらにはログを記録する機能を追加したので、その告知が本記事の主題です 😉 。

続きを読む

WordPressとMovable Type間のトラックバック/ピンバック(2)

前回、世の中では古いネタであろうトラックバックとピンバックに関する仕様の違いを調べ、今更ながら相互に互換性がないということが分かりました。WPからMTへのトラックバック要求は、WPの「トラックバック送信」欄にトラックバックURLを指定すれば可能です。一方WPがMTからのトラックバック要求を受け入れるためには、WPの記事にトラックバックURLが必要です。果たしてこれはあるのかと思い調べてみたところ、Tec de Goで「WordPressでTrackback URLのボックスを表示」するPHPコード&スタイルシート設定を公開されていましたので、このブログでも 使わせていただいています。

このPHPコードで使われている関数 trackback_url() は comment-template.php で定義されています。そのすぐ下には、前回調べた Trackback Ping URL の Auto-Discovery に対応するためにRDFブロックを出力する関数 trackback_rdf() が定義されいます。これらの使い方を知るためにWordPress Codexで調べてみました。以下のリファレンスは「テンプレートタグ」の項目から辿れます。

関数のリファレンス 使用例へのリファレンス
trackback_url Different Single Post Format
trackback_rdf Trackback Autodiscovery

trackback_url() は single.php への組み込み例が詳しく説明されています。一方 trackback_rdf() の方は、組み込むべき具体的テンプレートファイル名への言及はなく WordPressループの終了

<?php endwhile; ?>

の直前に挿入すれば良いように記述されているため、この文脈からは index.php への組み込みが想像されます。しかし Auto-Discovery が想定するのは特定エントリに対応するトラックバックURLの入手であったハズ。とすれば、個別のエントリページを生成する single.php にさえRDFを埋め込めば Auto-Discovery として必要十分な筈です。ということで、トラックバック本家のMTを調べてみました。

MTのトラックバック設定

MTのトラックバック設定

「設定 » コミュニケーション » トラックバック設定」で「許可」を選択すると各エントリページにRDFが埋め込まれるようになります。

MTではさらにトップページにおいても、紹介される最新記事の1つ1つに Trackback Ping URL を含むメタ情報がRDFとして埋め込まれる仕様となっています。確かに TrackBack Technical Specification の Auto-Discovery には

ページは複数のRDFインスタンスを含むことができる — クライアントはその中から dc:identifier が自分の要求するURLと一致するRDFブロックを拾えば良い

とあり、このようなトップページへのRDF埋め込みは仕様上正しい実装です。本家のこの振る舞いをWPに実装するには index.php にも trackback_rdf() を組み込めば良いでしょう。ですが Auto-Discovery という機能にとってこの実装が一体どう役に立つのか、私にはよく理解ができていません。逆にトップページに最新記事のエントリとトラックバックURLのリストをズラズラと並べる事は、スパマーにとって格好の餌食となっている以外メリットがないのでは?と思えてしまいます。

さてここまで考えを巡らせてみて trackback_rdf() とスパムとの関連を改めて調べてみると、ぼのさんが「WP: Trackback Auto-Discovery 捜索」に良くまとめられていました(この方のブログは参照文献のまとめ方が秀逸です)。トラックバックの実装はテーマ次第であること、またトラックバックスパムを減らすには Auto-Discovery を消すのが効果的であるとの事です。トップページであろうが個別のエントリページであろうが本質的な違いはさほどなく、RDFによるメタ情報がスパマーにとって美味しいネタとなっていることでしょうかネ。

WP初心者ゆえの「臆病さ」からトラックバックとピンバックの事をアレコレ調べてきましたが、結局 トラックバックの Auto-Discovery 機能は実装しない が今回の結論となりました。

いっそ、MTユーザー向けにピンバックのプラグインなどを作ってみようかなぁ(ウソ)。

WordPressとMovable Type間のトラックバック/ピンバック

巷で流行のブログ(もう普通だぜ!)、中でもトラックバック/ピンバックってどんなシカケなのかを知りたい! とずっ~と思っていました。そこでこのブログを立ち上げ後、さらに2本のWordPressと1本(で2つのブログ)のMovable Type 5.0をLaCoocan上にインストールし、各ブログ間でトラックバック/ピンバックのやり取りを観察しています(ただし前回書いたように、現時点でのLaCoocanはMT5の動作条件を満たしていません)。

トラックバックとピンバックの違いについては、WordPress Codexの「ブログ入門」にある解説が手がかりになります。以下はピンバックについての解説からの引用です。

ただし、ピンバックとトラックバックには大きな違いが三つあります。

  • ピンバックとトラックバックでは根本的に違うコミュニケーション技術を使用しています (XML-RPC と HTTP POST)
  • ピンバックは自動発見機能をサポートしていて、投稿内の URL を自動的に見つけてそれらの URL にピンバックを発信します。一方、トラックバックは送信先のトラックバック URL を手動で入力する必要があります
  • ピンバックは内容の送信はしません

ピンバックはリモートコメントと考えるのが一番いいでしょう。

  • A さんが自分のブログに何か投稿します
  • B さんが自分のブログに投稿して、A さんの投稿にリンクを張ります。両者のブログでピンバックが有効になっていると、A さんに自動的にピンバックを送信します
  • A さんのブログはピンバックを受信すると、自動的に B さんの投稿へ行き、そのピンバックが本当にそのブログから発信されたのかを確認します

ピンバックは通常は B さんの投稿への単純なリンクとして A さんのブログに表示されます。このように、投稿に対する編集のすべてのコントロールは各投稿者のみに委ねられます(この点が受信者によって編集できるトラックバックの抜粋とは違います)。この自動認証プロセスによってある程度の信頼性が保たれ、ピンバックの捏造を難しくしています。

人によってはトラックバックのほうが優れていると感じるでしょう。A さんのブログの読者は B さんが何を言っているのか少なくともいくらかは読むことができ、それ以上読むかどうか(つまりクリックして B さんのブログを訪れるか)を自分たちで決めることができるからです。また、人によってはピンバックのほうが優れていると感じるでしょう。ブログの投稿間で 検証可能な接続ができるからです。

長く引用したのには若干の訳があります。特に後半部分に関して言えば、私のようなトラックバック/ピンバック初心者はGoogleで「言及リンクのないTrackBack」を検索し、コメントスパムやトラックバックスパムに関する議論(海外ではその数年前に同種の議論が起きていたようですが)を知っておくと良いかも知れません(私はこの2005年頃の記事にトラックバックを送る勇気は到底ありません)。ピンバックの生い立ちに触れることはトラックバックとの違いを理解する上で役に立つと思います(どうでもいいことかもしれませんが)。

さて、WordPress Codexを読み進めていくとそれぞれの仕様書に行き当たります。

またXML-RPCはhttp://www.xmlrpc.com/specで確認することが出来ます。これらを元に両者の概要と特徴をまとめてみました。

トラックバック ピンバック
概要
トラックバックのフロー

トラックバックのフロー

  1. クライアント(トラックバックの要求元)はトラックバックの送信先の記事ページを取得する
  2. ページURLと一致するidentifierを持つRDFよりTrackback Ping URLを得る(自動発見機能)
  3. ブログ名、タイトル、要約などを付けTrackback Ping URLにHTTP POSTリクエストを送信する
ピンバックのフロー

ピンバックのフロー

  1. クライアント(ピンバックの要求元)は記事中のリンク先ページを取得する
  2. HTTPヘッダ、またはlink要素よりPingback Server URI を得る(自動発見機能)
  3. Pingback Server URI にメソッド名pingback.pingをXML-RPCで送信する
  4. Pingを受信したサーバーは要求元のページを取得し、リンクを確認後クライアント記事へのリンクを張る
特徴
  • サーバーからクライアントへの一方向リンク
  • クライアントは記事の概要などをサーバーへ送信する
  • クライアント、サーバー間での双方向リンク
  • クライアントがサーバーへ送信するのはURI のみ

両者とも最初に行うのは送信先ページの取得ですが、この時のユーザーエージェント値はそれぞれ以下であることが分かりました。

Movable Type Pro/5.0
WordPress/2.8.6; http://hoge/baka/hage/boke
トラックバックの自動検知オプション

トラックバックの自動検知オプション

また先の引用には両者の大きな違いとして「ピンバックは自動発見機能をサポートしていて…」を挙げていますが、トラックバックにも「Auto-Discovery」という自動発見のための仕様があります。実際ツールとしてのMTはオプションとしてトラックバックの自動検知が設定可能です。

ではなぜWPがこれを大きな違いとして主張するかというと、ピンバック仕様がユーザーエージェント(この場合ツールとしてのWP)に記事中のリンク抽出からピンバック送信までを「全自動で行う機能」をMUSTで要求しているのに対し、トラックバック仕様はその辺が明示されていないからではと思われます。

さて全体を通して両者の比較により分かることは、ピンバックはトラックバックの以下の弱点を改善するために定めた仕様であるということです。

  • 相手にはリンクを張ってもらうが自分は張らないという、リンクの不公平性
  • HTTP POST のみによる簡便なトラックバック送信による、トラックバック・スパム

前者は「言及リンクのないTrackBack」の議論と重なるため先に紹介をした次第です。後者は掲示板システムなどで使われているフォームによる(一方的な)投稿と全く同じ仕組みのため、「言及リンク」の内容確認を仕様化したのだと思われます。試しに

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>trackback test</title>
</head>
<body>
<!-- form -->
<form action="http://tokkono.cute.coocan.jp/hoge/baka/hage/boke" method="POST">
<table>
 <tr>
 <td>title</td>
 <td><input type="text" name="title" value=""></td>
 </tr>
 <tr>
 <td>excerpt</td>
 <td><textarea name="excerpt" rows="4" cols="40"></textarea></td>
 </tr>
 <tr>
 <td>url</td>
 <td><input type="text" name="url" value=""></td>
 </tr>
 <tr>
 <td>blog_name</td>
 <td><input type="text" name="blog_name" value=""></td>
 </tr>
</table>
<p><input type="submit" value="トラックバックを送る"></p>
</form>
<!-- end of form -->
</body>
</html>

(hoge/baka/hage/boke はダミー!)をローカルPC上に保存し、ブラウザから適当に送信します。

トラックバックを模したフォーム

トラックバックを模したフォーム

するとサーバーから

サーバーからのレスポンス

サーバーからのレスポンス

生成されたトラックバック

生成されたトラックバック

のレスポンスが返ると共に、MTのブログ上にはトラックバックが生成されてしまいます(MTには言及リンクをチェックするプラグインがあるので、実際にはこんな簡単なスパムにはやられないと思いますが…)。

これほど簡単ではないにしろ、WordPressへのピンバック・スパムも(まだココは受けたことがないので分かりませんが)不可能ではないと思います。掲示板のスパム対策に目処をつけて始めたこのブログも、またスパム対策に追われる日々がやって来るのでしょうか?