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)するだけで解消され、サンプルコード側を特に修正する必要はありません。
読者の方から出版社の方に問い合わせがあったそうなので(その方には直接回答が行くと思いますけど)、一応こちらでも回答しておきます。
投稿者 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
: 2006年09月05日 19:11