« おまけ: 認証状態を保存する方法 | メイン

2005年07月11日

PEAR XML-RPCの脆弱性について

PEAR XML-RPCライブラリに脆弱性が発見された件ですが、『自分で作るblogツール』では特に影響はありません。

配布しているアーカイブでは、PEAR XML-RPCライブラリを利用せず、curl関数を利用した独自のXML-RPCコールを実装しており、脆弱性のあるXML-RPCライブラリは収録されていません。

また、本書内でPEAR XML-RPCライブラリを利用するサンプルコードを紹介していますが、今回発見された脆弱性への対応としては、PEAR XML-RPCライブラリをアップデート(pear upgrade XML-RPC)するだけで解消され、サンプルコード側を特に修正する必要はありません。

読者の方から出版社の方に問い合わせがあったそうなので(その方には直接回答が行くと思いますけど)、一応こちらでも回答しておきます。

『自分で作るblogツール(PHP編)』サポートエントリーに戻る

投稿者 ishinao : 2005年07月11日 19:51

コメント

自分で作るblogツールを買ったのです
ping送信でレンタルしているサーバが
curl関数が使えないようです。
トラックバックの受信はできるのですが
送信ができません。
違う方法はどんなのがあるのでしょうか?

投稿者 なし : 2006年08月04日 10:03

すみません、大量のspamコメントにうもれて気づいていませんでした。1ヶ月放置してすみません。

PHPでトラックバックの送信(HTTP POSTリクエスト)を行う方法としては、本書で紹介したcurl関数を利用する方法以外に、

* socket関数を使う
* stream関数を使う
* PEARのHTTP_RequestクラスなどのHTTP通信用ライブラリを使う

あたりがあります。一番簡単なのは3番目のPEAR HTTP_Requestクラスを利用する方法でしょう。

$req =& new HTTP_Request([トラックバック送信先ping URL]);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData('url', [送信する記事のURL]);
$req->addPostData('title', [送信する記事のタイトル]);
// その他パラメータをセットする
$result = $req->sendRequest();
if (PEAR::isError($result)) {
//送信エラー
}

のようなやり方になります(上記、実際にコードは動かしてませんので、typo等あるかもしれません)。

またsocket関数を使うと以下のような感じになります。

$charset = [送信元文字コード];
$pingurl = [送信先Ping URL];
$urlinfo = parse_url($pingurl);
$host = $urlinfo['host'];
$path = $urlinfo['path'];

$sock = fsockopen($host, 80, $errno, $errstr, 60);
if (!$sock) die("$errstr ($errno)\n");

$data = "title=" . urlencode([送信する記事のタイトル]);
$data .= "&url=" . urlencode([送信する記事のURL]);
//その他パラメータを追加する

fputs($sock, "POST $path HTTP/1.1\n");
fputs($sock, "Host: $host \n");
fputs($sock, "Content-Type: application/x-www-form-urlencoded; charset=$charset\n");
fputs($sock, "Content-Length: " . strlen($data) . "\n");
fputs($sock, "\n");
fputs($sock, "$data");

$result = '';
while (!feof($sock)) $result .= fgets($sock, 4096);

fclose($sock);

投稿者 ishinao [TypeKey Profile Page] : 2006年09月05日 19:11

コメントしてください




保存しますか?