Google Crisis Response(Google)
災害に関する情報源や、行方不明者情報の収集と検索を行う『パーソンファインダー』を初めとするツールの提供が行われています。

2010年4月3日 土曜日

AmazonLink 2.0.0 beta3 リリース

Filed under: AmazonLink
タグ:,
時間:17時39分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

AmazonLink 2.0.0 beta3 をリリースしました。

今回のリリースのメインは、コードを1行に表示した場合に1つめしか変換されなかったバグの修正です。自分の古い記事で偶然私が見つけたのとほぼ同時期に、テンプレート方式に移行した方が記事にしていたのに気がついたのと、Twitter で @boka_kabo さんから報告をいただきました。

そのほか、Powerd by のリンク先をカテゴリーページではなく専用の固定ページに変更しました。このことはすでに先月記事にしていますが、これはなんだろうと見に来てくれた方に概要を伝えるためのポータル的な役割を持たせています。

2010年4月10日追記

WordPressが認識する部分のバージョンが古いままでした。本日11時40分以降ダウンロードした場合は正しいファイルになっています。

訂正前のファイルでも動作には問題ありませんが、気になる方は「AmazonLink.php」の差し替えまたは書き換えを行ってください。書き換える場合は7行目を次のようにします。

[php]
/*
Plugin Name: AmazonLink
Plugin URI: http://wppluginsj.sourceforge.jp/amazonlink/
Description: Amazon.co.jp の商品情報を同一の設定で表示します。ブログのデザイン変更に簡単に対応できます。
Author: よしとも
Version: 2.0.0 beta3
Author URI: http://blog.yoshitomo.org/
*/
[/php]

Comments (6)

2010年3月22日 月曜日

AmazonLink の案内ページを作成

Filed under: AmazonLink
タグ:,
時間:22時02分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

AmazonLink の Powerd by 表示からのリンク先は現在記事カテゴリーになっていますが、これの変更先として固定ページを作りました。

ダウンロード案内ページは WordPress Plugins/JSeries、実際のダウンロードは SourceForge.jp、新しい情報の通知はこのサイトとばらばらになってしまっているので、ポータル的な案内ページの形に持って行きたいと思っています。

Comments (0)

2009年12月13日 日曜日

WordPressのアップグレードとユーザー権限

Filed under: WordPress,ハック
タグ:, , ,
時間:17時43分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

WordPress の自動アップグレードをしようとすると「このブログのプラグインを更新するための十分な権限がありません。」となってしまうので調査をしていたのですが、原因が判明しましたので記事にします。

まず、調査対象のバージョンは2.8.4です。2.6系から直接アップグレードしたもので、一番初めは2.0ME系でした。接頭辞は wp です。

権限がないといわれてしまう原因ですが、そのまま権限が与えられていないためです。管理者で作業しているので普通はそんなことはありえないのですが、どうやらアップグレード時に行われるデータベースの更新に問題があったようです。

権限情報の記録場所

権限の情報はオプションとしてデータベース上に記録されていて、次のSQLで見つけることができます。

[sql]
SELECT `option_name`,`option_value` FROM `wp_options` WHERE `option_name` = ‘wp_user_roles’;
[/sql]

このオプションの値はPHPでシリアライズしたもので、管理者や編集者といったロール(役割)ごとに権限を配列の形で格納しています。wp-includes/capabilities.php の冒頭には、次のように書かれています。

[php num=12]
* The role option is simple, the structure is organized by role name that store
* the name in value of the ‘name’ key. The capabilities are stored as an array
* in the value of the ‘capability’ key.
*
*
* array (
* 'rolename' => array (
* 'name' => 'rolename',
* 'capabilities' => array()
* )
* )
*

[/php]

権限の記録は20行目の配列で、権限名がキーでその権限があるかどうかを示す真偽値が値となります。

現状の確認

さて、ここまでを踏まえて実際にどのように権限情報が記録されているかを確認します。PHPで表示させるプログラムを書いてみてもいいのですが、面倒なのでもっと手っ取り早い方法を使いました。

前述したSQLでオプション値を取得し、それをテキストエディタ(私は秀丸エディタを使いました)に貼り付けます。このままではすべてが1行に繋がってわかりにくいので、{ と } と ; の後ろにテキスト置換で改行を入れました。
こうすると、権限名と真偽値が交互になってわかりやすくなります。

準備ができたら権限名を探します。自動アップグレードのアドレスから、きっかけとなるコードは wp-admin/update-core.php であることがわかりますので確認します。

冒頭の12行目に次のようにあります。

[php num=12]
if ( ! current_user_can(‘update_plugins’) )
wp_die(__(‘You do not have sufficient permissions to update plugins for this blog.’));
[/php]

update_plugins という名前の権限を確認して、権限がなければメッセージを表示して終了するという処理ですね。早速この権限名を先ほど準備したテキストデータで探しますと、見当たりません。この名前をキーとする配列要素がないということになりますので、PHPでは真偽値は false となります。

念のため新規に同じバージョンのインストールをしてみた場合で確認したところ、しっかりとこの権限については true となっていました。

なぜこうなったのか

こうなると原因が気になります。アップグレードスクリプトの権限処理をするところを探してみました。アップグレードインストールをするときのファイル名を基点にしてたどってみたところ、wp-admin/includes/upgrade.php に定義されている upgrade_all() という関数の中で、WordPressデータベースのバージョンによってアップグレード用の関数を呼び出していることがわかりました。

[php num=278]
/**
* Functions to be called in install and upgrade scripts.
*
* {@internal Missing Long Description}}
*
* @since unknown
*/
function upgrade_all() {
global $wp_current_db_version, $wp_db_version, $wp_rewrite;
$wp_current_db_version = __get_option(‘db_version’);

// We are up-to-date. Nothing to do.
if ( $wp_db_version == $wp_current_db_version )
return;

// If the version is not set in the DB, try to guess the version.
if ( empty($wp_current_db_version) ) {
$wp_current_db_version = 0;

// If the template option exists, we have 1.5.
$template = __get_option(‘template’);
if ( !empty($template) )
$wp_current_db_version = 2541;
}

if ( $wp_current_db_version < 6039 )
upgrade_230_options_table();

populate_options();

if ( $wp_current_db_version < 2541 ) {
upgrade_100();
upgrade_101();
upgrade_110();
upgrade_130();
}

if ( $wp_current_db_version < 3308 )
upgrade_160();

if ( $wp_current_db_version < 4772 )
upgrade_210();

if ( $wp_current_db_version < 4351 )
upgrade_old_slugs();

if ( $wp_current_db_version < 5539 )
upgrade_230();

if ( $wp_current_db_version < 6124 )
upgrade_230_old_tables();

if ( $wp_current_db_version < 7499 )
upgrade_250();

if ( $wp_current_db_version < 7796 )
upgrade_251();

if ( $wp_current_db_version < 7935 )
upgrade_252();

if ( $wp_current_db_version < 8201 )
upgrade_260();

if ( $wp_current_db_version < 8989 )
upgrade_270();

if ( $wp_current_db_version < 10360 )
upgrade_280();

maybe_disable_automattic_widgets();

update_option( 'db_version', $wp_db_version );
update_option( 'db_upgraded', true );
}
[/php]

呼び出されている upgrade_***() という関数の中では、さらに必要に応じて populate_roles_***() という関数を呼び出しています。

この関数の定義は wp-admin/includes/schema.php にあり、そこではまさにロールごとに権限の追加を行っていました。

次のSQLでデータベースバージョンを確認して呼び出されるはずの関数の処理を確認してみました。

[sql]
SELECT `option_name`,`option_value` FROM `wp_options` WHERE `option_name` = 'db_version';
[/sql]

2.6の新規インストール環境では8201となっていましたので、upgrade_all() の342~346行目が該当します。呼び出される関数の定義は次のとおり。

[php num=955]
/**
* Execute changes made in WordPress 2.7.
*
* @since 2.7.0
*/
function upgrade_270() {
global $wpdb, $wp_current_db_version;

if ( $wp_current_db_version < 8980 )
populate_roles_270();

// Update post_date for unpublished posts with empty timestamp
if ( $wp_current_db_version < 8921 )
$wpdb->query( "UPDATE $wpdb->posts SET post_date = post_modified WHERE post_date = '0000-00-00 00:00:00'" );
}

/**
* Execute changes made in WordPress 2.8.
*
* @since 2.8.0
*/
function upgrade_280() {
global $wp_current_db_version;

if ( $wp_current_db_version < 10360 )
populate_roles_280();
}
[/php]

[php num=554]
/**
* Create and modify WordPress roles for WordPress 2.7.
*
* @since 2.7.0
*/
function populate_roles_270() {
$role =& get_role( 'administrator' );

if ( !empty( $role ) ) {
$role->add_cap( 'install_plugins' );
$role->add_cap( 'update_themes' );
}
}

/**
* Create and modify WordPress roles for WordPress 2.8.
*
* @since 2.8.0
*/
function populate_roles_280() {
$role =& get_role( 'administrator' );

if ( !empty( $role ) ) {
$role->add_cap( 'install_themes' );
}
}
[/php]

populate_roles_***() で追加している権限を確認したところ、3つとも登録されていました。今度はさかのぼって確認してみると、populate_roles_260() で追加される2つの権限のみがありませんでした。しかもその1つは今回問題となっている update_plugins です。

どうやらここで失敗していたようです。

[php num=540]
/**
* Create and modify WordPress roles for WordPress 2.6.
*
* @since 2.6.0
*/
function populate_roles_260() {
$role =& get_role( 'administrator' );

if ( !empty( $role ) ) {
$role->add_cap( 'update_plugins' );
$role->add_cap( 'delete_plugins' );
}
}
[/php]

修復方法

原因まで判明したので、権限情報の修復を行います。直接書き換えてもいいのですが、間違えると面倒なので簡単なプログラムを作りました。

データを抽出して権限を追加し、再度シリアライズして表示するだけ。表示されたテキストデータをデータベース用の管理画面(ここのサーバーは phpMyAdmin が使えるのでそれを使いました)から直接反映させました。

このプログラムは自由に使っていただいてかまいませんが、何かあったときの補償はできませんので自己責任でお願いします。

[php]
header('Content-type: text/plain;charset=UTF-8');
$link = mysql_connect('データベースサーバー', 'ユーザー', 'パスワード');

if ( $link )
{
mysql_set_charset('utf8');
if ( mysql_select_db('データベース') )
{
$sql = "SELECT `option_name`,`option_value` FROM `wp_options` WHERE `option_name` = 'wp_user_roles'";
if ( $res = mysql_query($sql) )
{
if ( $rows = mysql_fetch_assoc($res) )
{
$rol_data = unserialize($rows['option_value']);
$rol_data['administrator']['capabilities']['update_plugins'] = true;
$rol_data['administrator']['capabilities']['delete_plugins'] = true;
print serialize($rol_data);
}
}
else
{
print mysql_error();
}
}
else
{
print mysql_error();
}
}
else
{
print mysql_error();
}
?>
[/php]

というわけで、無事自動アップグレードの画面を拝むことができました。

Comments (1)

2009年9月7日 月曜日

AmazonLink 2.0.0 beta2 リリース

Filed under: AmazonLink
タグ:,
時間:23時30分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

すでに昨夜の話になってしまいますが、AmazonLink 2.0.0 beta2 をリリースしました。ダウンロードは、いつものようにWordPress Plugins/JSeriesのサイトからどうぞ。

ページ投稿画面での検索フォーム追加や、AmazonLink コードの変更などをしています。また、アップグレードが進むとの予測から、急いで WordPress 2.8.4 での動作検証も行いました。2.8系は投稿画面の幅が狭くなっているため、ボタンなどのレイアウトも少し変えてあります。

AmazonLinkコードの変更ですが、商品ごとにテンプレートを変える機能を思いついたためです。テンプレートは複数行になる可能性が高いため、属性値とするには不向きです。そのため、コードに挟むことができるようにしました。

なお、内部で変換処理を行っているので、今までの形式も使用することはできます。

ASIN は Amazon Standard Item Number の略で、Amazon の商品コードです。

以前の形式

[code]
[amazon]ASIN[/amazon]
[/code]

新しい形式

[code]
[amazon asin="ASIN"][/amazon]
[amazon asin="ASIN" /]
[/code]

現在は個別のテンプレートには対応できていませんが、TODOには入れておこうと思います。手を出しすぎると切りがないので、正式リリースまでは触らない予定です。

Comments (1)

2009年9月6日 日曜日

WordPress を最新版にアップグレードしてください

Filed under: WordPress
タグ:, , ,
時間:15時10分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

現在、WordPress 2.8.4 未満に存在するセキュリティーホールをターゲットとした不正アクセスが行われているようです。該当バージョンを使用している方はできるだけ早めにアップグレードを行ってください。当サイトも、先ほど作業を行いました。

不正アクセスが行われているかどうかの判別については、コリスさんがまとめてくださっています。

また、この記事に書かれている「WordPress Permalink & Rss problems」を、山本さくらさんが和訳した物を公開されています。

WordPress | 日本語 には、本家ブログの記事「How to Keep WordPress Secure」を訳したものが掲載されました。

これらの記事を参考に、不正アクセスが行われていないかどうかの確認と最新版へのアップグレードを行ってください。アップグレード済みであっても、念のため不正アクセスの有無の確認は行ってほうがいいと思います。

コリスさんの記事にもありますが、不正アクセスの形跡があった場合はデータベースも不正アクセスされている可能性があるとのこと。その場合はこのセキュリティホールが発見されるよりも十分古いバックアップに戻す以外は対策はなさそうです。
そうならないためにも、できるだけ早くアップグレードを行ってください。

2009年9月6日 15時40分 追記

それでもアップグレードを渋っている方には、Naoさんによる次の記事をどうぞ。

2009年8月7日 23時10分 追記

山本さくらさんが、攻撃内容について詳しく書かれています。

古いバージョンを使用しているところはすべてアウトと言うわけではないようですね。
とは言うものの、まだ見つかっていないセキュリティーホールによって条件がゆるくなる可能性は十分あります。残念ながら「バグのないプログラムはない」のです。

Comments (3)

2009年9月5日 土曜日

AmazonLink のテンプレート

Filed under: AmazonLink
タグ:, ,
時間:16時17分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

8月14日に公開となった AmazonLink 2.0.0 beta では、テンプレート機能によってある程度自由にデザインを作ることができるようになっています。

管理画面上の説明でどこまで伝わるのか自信がないので、現在このサイトで使用しているテンプレートを公開しようと思います。

[code]

[/code]

テーブルの幅が固定であったりしますが、別のサイトにも流用可能かと思います。WordPress や プラグイン同様に GPL ライセンスとしますので、ご自由にお使いください。

Comments (2)

2009年8月14日 金曜日

AmazonLink 2.0.0 beta リリース

Filed under: AmazonLink,アフィリエイト
タグ:, ,
時間:18時33分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

JSeries サイトの更新はまだですが、先ほど AmazonLink 2.0.0 beta をリリースしました。
現在 SourceForge.JP の以下のアドレスからダウンロードができるようになっています。

http://sourceforge.jp/projects/wppluginsj/downloads/43119/AmazonLink-2.0.0beta.zip/

19時25分追記

Jseries サイトを更新しました。メジャーバージョンアップと言うことで、新規にページを作成してあります。
http://wppluginsj.sourceforge.jp/amazonlink2/

Comments (2)

2009年8月9日 日曜日

AmazonLink 2.0 beta もうすぐ・・・

Filed under: AmazonLink
タグ:, , , ,
時間:18時28分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

平日は忙しくてまったく時間はないわ、休日は平日できてないことをやってると終わってしまうわでほぼ停止状態でしたが、昨日と今日で AmazonLink を Amazon の Product Advertising API に対応させました。

ついでに WordPress 2.7 にも対応させたので、近いうちにベータ版として公開することができそうです。2.8 は未テストなので、対象外の予定です。

また、サイドバーでやってたアンケートの結果を元に、今回から動作環境条件として PHP 5.1 以上とします。これにより、Amazon とのやり取りの処理が PHP のネイティブ関数を使えるようになるので処理が早くできるはずです。PHP 4.x の環境しかない方はごめんなさい。

ベータ版として公開したあとの予定ですが、プログラムの整理と PHP 5.x らしい書き方への変更をしたいと思っています。一緒に WordPress 2.8 にも対応したいですね。

今後も使っていただけるという方は、Product Advertising API アカウントの取得をしておいてください。8月15日以降は、アカウントがないと投稿画面での検索ができなくなります。

Comments (0)

2009年6月14日 日曜日

ClickComments がサービス終了

Filed under: WordPress
タグ:,
時間:19時27分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

アイコンをクリックするだけで感想を投稿できる ClickComments というサービスを利用していましたら、いつの間にか終了してしまっていました。

専用の WordPress プラグインで記事の下に表示していたのですが、いつの間にか表示されない状態に。一時的な問題かと思って様子を見ていましたが、いつまでも直らないので調べてみたら表示のためにサービスサイトから読み込む JavaScript ファイルが Not found。

サービスサイトを見に行ってみると、長期のサービスをサービスを続ける余裕がないために無期限に終了するというメッセージが表示されていました。

Unfortunately, postreach ClickComments has been shut down indefinitely because we can no longer afford to keep it running.

クリックして下さる方もいらしたので残念ですが、プラグインを停止しました。
同じようなサービスをご存知でしたら、ぜひコメントをください。

Comments (0)

2009年5月31日 日曜日

PHPバージョンアンケート

Filed under: AmazonLink,プログラミング
タグ:,
時間:3時21分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

AmazonLink を Product Advertising API(旧 Amazon アソシエイト Web サービス)に対応させるに当たり、PHPのバージョンの傾向を知るためのアンケートを開始しました。アンケートはサイドバーにも掲載されます。

PHPは4.x がすでに公式に開発終了となっていますが、まだまだ生き残っています。5.x に移行するべきではありますが、サーバー側で対応していなければどうしようもありません。大手レンタルサーバーはすでにかなり対応していますが、4.x しか使えないところも残っているようです。

現時点でどれくらいのサーバーが移行できているのかを知ることが目的です。ご協力よろしくお願いします。

{democracy:3}
Comments (0)
« 前ページへ次ページへ »

HTML convert time: 0.181 sec. Powered by