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

2009年5月10日 日曜日

”Amazon アソシエイト Web サービス”が”Product Advertising API”に

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

Amazon.co.jp からいろいろな情報を取得することができる”Amazon アソシエイト Web サービス”というサービスがありますが、”Product Advertising API”という名称に変わるとのことです。そして、情報のリクエストには署名による認証が必要になるとのこと。

拙作 WordPress プラグインの AmazonLink でもこのサービスを使用しているので他人事ではありません。

基本方式はほとんど変わらないとのことですが、認証で使用する電子署名の作成には、開発者登録をしたときに作成した Secret Access Key というものが必要になるようです。リクエスト時のデータによって変わるため、電子署名データだけをプログラムに埋め込んでおくことができません。また、Secret Access と言うくらいなのでこれを公開するのも駄目でしょう。

詳しい情報がまだ得られていないのでなんとも言えませんが、ただ使うだけの人にも開発者登録をしてもらわないと駄目になるかもしれません。

今のところは、たつをさんによる記事が一番詳しそう。

電子署名データの作成には RFC 2104-compliant HMAC with the SHA256 hash algorithm という変換処理のようなものが必要で、これを行うための関数である hash は PHP5 でないと標準では使用できません。PHP4 はすでに終了宣言が出ているのですが、まだ PHP5 が使用できないサーバーもあるので悩みどころです。

Comments (0)

2009年1月18日 日曜日

【重要】不正アクセスを受けました

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

不正アクセスを受けていたようです。現時点で判明している被害と行った対策は次のものです。

不正投稿

内容

先日、投稿した記憶のない記事がRSSに含まれていることに気がつきました。実際に過去の日付で投稿されており、不正アクセスをされたと結論付けました。

記事の内容は、違法またはセキュリティ的に危険な内容のサイトへの誘導と思われます。幸いタグが間違っているためにリンクにはなっておりませんでしたが、すぐに記事は削除いたしました。

対策

どのような形で投稿が行われたのかは不明ですが、WordPress を2.6系の最新バージョンへアップグレードいたしました。また、XML-RPC などの外部から投稿を可能にする機能は無効にしてあります。

テンプレートファイルの書き換え

内容

テンプレートファイルの footer.php に大量の隠しリンク(スタイルシートで非表示にしてありました)を記入されていました。本来4KBほどのサイズなのですが、記入されたファイルは1MB弱になっていました。

書き込まれた内容は、やはり外部サイトへのリンクでした。隠しリンクになっていましたので、検索エンジンロボットを対象としたものでしょう。
リンクの中には WordPress を使用したサイトと思われるものも多数ありましたので、WordPress を使用しているサイトが狙われている可能性があります。ユーザーの方は、書き換えが行われていないか確認することをお勧めします。

対策

追記された部分については、すでに削除してあり、そのほかのテンプレートに関しても確認を行いました。

また、管理画面から編集可能にするためファイル属性を666(誰でも書きこめる状態)にしてあったため、危険であると判断して644(ファイルの所有者のみが書きこめる状態)に変更しました。

Comments (0)

2008年11月29日 土曜日

WordPress 用プラグイン monthchunks のバグを修正

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

 このブログでは、月ごとアーカイブをコンパクトに表示してくれるプラグイン monthchunks を使用していますが、記事がないのに表示されている月があることが判明しました。

 問題の月は、2006年の9月。Google ウェブマスターツールのリンクエラー報告によると、76箇所で表示されているとのこと。さすがに数が多いので、本腰を入れて調べてみることにしました。久しぶりのプラグインハックです。

 何はともあれ、まずはプラグインのコードを読みます。使用しているバージョンは、最新の2.1。関数が1つ定義してあるだけでコメントを含めても154行と非常に短いので、初めてのハックにはお勧めかもしれません。

 大まかな流れは、SQL 文を生成して実行するだけ。オプションによって多少分岐がありますが、上から追いかけていけば大したことはありません。101行目からと114行目(110行目から始まる foreach の中)からの2箇所でデータベースにアクセスしています。1箇所目は記事のある年度の取得、2箇所目は各年度別に記事のある月の取得をしています。

  1. // get an array of the years in which there are posts
  2.     $wpdb->query("SELECT DATE_FORMAT(post_date, '%Y') as post_year
  3.                  FROM $wpdb->posts
  4.                  WHERE post_status = 'publish'
  5.                  GROUP BY post_year
  6.                  HAVING post_year <> '0000'
  7.                  ORDER BY post_year $year_order");
  8.     $years = $wpdb->get_col();
  1. // get an array of months for the current year without leading zero
  2.         // sort by month with leading zero
  3.         $months = $wpdb->get_results("SELECT DATE_FORMAT(post_date, '%c') as post_month,
  4.                                      $month_format AS display_month,
  5.                                      DATE_FORMAT(post_date, '%M') as post_month_name
  6.                                      FROM $wpdb->posts
  7.                                      WHERE DATE_FORMAT(post_date, '%Y') = $year
  8.                                      AND post_status = 'publish'
  9.                                      GROUP BY DATE_FORMAT(post_date, '%m')
  10.                                      ORDER BY post_date");

 今回問題になっているのは月の情報なので、2箇所目を詳しく見ていきます。PHP のコードと SQL が混在してわかりにくいので、最終的な SQL 文を記述してみます。オプションを特に指定しない場合は、次のようなものが出来上がります。(改行やインデントなどを加えてあります)

  1. SELECT
  2.     DATE_FORMAT(`post_date`, '%c') AS `post_month`,
  3.     DATE_FORMAT(`post_date`, '%c') AS `display_month`,
  4.     DATE_FORMAT(`post_date`, '%M') AS `post_month_name`
  5. FROM `wp_posts`
  6. WHERE
  7.     DATE_FORMAT(`post_date`, '%Y') = 2006
  8.     AND post_status = 'publish'
  9. GROUP BY DATE_FORMAT(`post_date`, '%m')
  10. ORDER BY `post_date`;

 実際にこの SQL 文を手がかりに検索してみると、記事ではなく固定ページが見つかりました。記事と固定ページを区別していないため、固定ページしかない月も表示してしまっていたのです。

 ここまでわかればあとは簡単。検索条件に記事であることを加えればいいのです。記事の場合は post_type というフィールドの値が post となるので(WordPress 2.1以降)、post_type = 'post' を加えます。変更後は次のようになります。私は120行目に加えました。

  1. // get an array of months for the current year without leading zero
  2.         // sort by month with leading zero
  3.         $months = $wpdb->get_results("SELECT DATE_FORMAT(post_date, '%c') as post_month,
  4.                                      $month_format AS display_month,
  5.                                      DATE_FORMAT(post_date, '%M') as post_month_name
  6.                                      FROM $wpdb->posts
  7.                                      WHERE DATE_FORMAT(post_date, '%Y') = $year
  8.                                      AND post_status = 'publish'
  9.                                      AND post_type = 'post'
  10.                                      GROUP BY DATE_FORMAT(post_date, '%m')
  11.                                      ORDER BY post_date");

 これにより、その年の公開されている記事という条件で絞り込むことができるようになりました。現在2006年の9月は表示されなくなっています。

2010年6月21日追記

prioさんからコメントをいただきましたので、年度の表示についても追記します。確認はしていませんので、参考程度にどうぞ。

100行目からの年度のコードを見ると、月の取得同様に固定ページも含むようになっています。SQLにしてみるとこんな感じ。

  1. SELECT
  2.     DATE_FORMAT(post_date, '%Y') as post_year
  3. FROM `wp_posts`
  4. WHERE
  5.     post_status = 'publish'
  6. GROUP BY post_year
  7. HAVING post_year <> '0000'
  8. ORDER BY post_year DESC

記事の投稿に限定する条件を加えると次のようになります。

  1. // get an array of the years in which there are posts
  2.     $wpdb->query("SELECT DATE_FORMAT(post_date, '%Y') as post_year
  3.                  FROM $wpdb->posts
  4.                  WHERE post_status = 'publish'
  5.                  AND post_type = 'post'
  6.                  GROUP BY post_year
  7.                  HAVING post_year <> '0000'
  8.                  ORDER BY post_year $year_order");
  9.     $years = $wpdb->get_col();

104行目が追加した行です。意味については、月の場合と同じです。

Comments (2)

2008年11月15日 土曜日

アンケートを設置しました

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

 WordPress のシェアを知りたかったので、アンケートを設置しました。右ペインのカレンダーの下にありますので、気が向いたらお願いします。

 アンケートは、Democracy AJAX Poll というプラグインを使用しています。Ajax を使用することで、ページのリロードなしで投票できます。導入方法などについては、ぼのさんによる記事が参考になると思います。

 なお、日本語リソースは配布していたサイトが閉鎖してしまったため導入していません。普通に日本語が使えましたので、とりあえずはこのままで行く予定です。

Comments (0)

2008年8月21日 木曜日

レイアウトを変更しました

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

 久しぶりにこのサイトのレイアウトを変更しました。3カラムなのは同じですが、左にあった広告スペースを中央に移動しました。

 本文のカラムの幅が中途半端でいやだったので、設置が必須である Value-Domain のバナーの幅に合わせました。これに伴い、記事本文下のアフィリエイトの形状を変更してあります。

 余白を減らしたこともあってスペースがかなり余ったので、その分右のカラムの幅をかなり広くしました。『最近のエントリー』が改行されにくくなったので、以前よりは見やすくなったのではないでしょうか。

 細かいところでは、フォントのサイズや行間の調整をしました。また、見た目には変化ありませんが、Google AdSense のコードを Google で管理できるものに差し替えたり、AmazonSearch中継君経由にしたりもしています。

 表示確認は以下のブラウザで行っています。

  • Internet Explore 6(Windows XP)
  • Internet Explore 7(Windows Vista)
  • Firefox 2.0.0.16(Window Vista)
  • Firefox 3.0.1(Windows XP)
  • Opera 9.25(Windows Vista)
  • Opera 9.25(Windows XP)
  • Safari 3.1.2(Windows Vista)

 一通り確認しているので Windows では大丈夫だと思いますが、Mac 環境では崩れているかもしれません。環境がなくて見ながら修正ということができないため、その場合はごめんなさいとなってしまうと思います。

Comments (0)

2008年8月13日 水曜日

WordPress 2.6 の投稿ページはシステムが変わったらしい

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

 久しぶりの WordPress ネタです。ちょっとだけですが・・・。

 昨日、拙作プラグインの AmazonLink のテストをするために、ローカル環境に WordPress 2.6 をインストールしました。そして、ざっと管理画面を眺めたらおもむろに AmazonLink をインストール。真っ先に記事投稿ページへ飛んで、フォームが表示されていることを確認。早速検索!

 「wordpress」(テストはいつもこれです)とキーワードフォームに打ち込んで、エンター!

 クルクルとあの画像が回転し始めそのまま待っていると、なぜか記事管理ページへ。投稿されてしまったようです。ここは検索結果が出るだけで画面遷移は起こらないはずなのですが。

 とりあえず戻ってキーワードを入力。今度は検索ボタンをクリック。でも何も起こりません。検索は始まらないし、送信中でもなさそうです。この瞬間頭の中は疑問符がいっぱいでした。

 ここでふと思い出したのが、2.6では submit は専用の JavaScript プログラムを経由することが推奨されているとどこかに書かれていたはず。どうやら簡単には動いてくれないようです。

 すでに2.6にしてしまった方ごめんなさい。対応は2.0以降にします。

2008年8月14日 追記

JavaScript ではなく PHP だったようです。

 よくわかりませんが、アクションフックに登録すればいいんでしょうか。日本語での詳しい説明がほしいところです。

Comments (1)

2008年7月27日 日曜日

Re: MovableTypeからWordPressに乗り換えた理由

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

 久しぶりにトラックバック企画に乗ってみることに。

 私の場合は、MovableType のライセンス体系変更がきっかけでした。3.0 からはもしかすると有料ライセンスに変更する必要があるかもしれない(どうやらこれは勘違いだったようですが)ということから、別のブログシステムに乗り換えるべきではないかと考えたのです。

 また、記事が増えるほど再構築に時間がかかるようになるという MovableType の仕様も気になっていました。現在のバージョンは再構築が不要になるようにすることもできますが、当時はまだ再構築が必須でした。

 記事では1ヶ月ほど同時進行でとありますが、実際は数週間で乗換えとなりました。このころはメインで使用するプログラム言語が Perl から PHP に移っており、コアファイルからテンプレートまでが PHP で構築されている WordPress は、私にとってかなりいじりやすいものだったのです。凝り性なので、いじりやすいことは重要でした。

 テンプレートがファイルとしての実体を持つ点も気に入っています。MovableType のテンプレートは、データベース上にあるデータでしかありません。ファイルという実態があるほうがいろいろと便利なのです。

 というわけで、有料になるのが嫌で試しているうちに、すっかり WordPress が気に入ってしまったというのが私の理由です。

Comments (1)

2008年7月21日 月曜日

最強本再び 『WordPress 2.5 でつくる! 最強のブログサイト』

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

 WordPress 界隈の方はすでにご存知かと思いますが、我らがひろまささんによる新たな WordPress 本が出版となりました。全面改訂で、60ページ以上ボリュームアップとのこと。

 すでにこのシリーズで2冊出ています。どちらも WordPress を使い始める一般向けという内容でしたが、今回のはプラグインの開発などまで視野を広げられていて、開発者人口を増やすことに貢献してくれるのではないでしょうか。

 プラグイン開発の章では、2.5から導入されたショートコードプラグインについても解説されています。正直、この部分だけで読まなくてはと思いました。拙作の AmazonLink がまさにショートコードなのです。

 今日買いに行こうかと思っていたのですが、昨日の夕方に突然の献本が。実は前回もいただけていて、そのときは予め知らされていました。でも、今回はまったくの不意打ち。楽しく読ませていただいております。

Comments (0)

2008年7月20日 日曜日

2.6の日本語版が出てしまった

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

 気がついたら、WordPress 2.6 の日本語版がリリースされていました。最近展開が早くて引き離されっぱなしです。

 プラグインに影響する変更もあったようで、開発側にもいる身としては悩ましいところです。ちゃんと読んでおかないとと思いつつも、日本語の情報がまだのようなので尻込みしてます。

Comments (0)

2008年5月24日 土曜日

Amazon Web Service の価格情報と発送時期

Filed under: AmazonLink,アフィリエイト,プログラミング
時間:17時25分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 AmazonLink 2.0 を開発中ですが、価格情報と発送時期の表示で悩んでしまっています。

 基本的に、Amazon Web Service では商品情報を24時間までキャッシュとして所持することが可能です。めったに変更されない情報については1ヶ月まで可能ですが、現時点では24時間を基準として更新するという実装をしています。

 今のところはうまく動いているのでこのまま価格についても実装するつもりだったのですが、途中で価格情報と発送時期はキャッシュ禁止となっていることが判明しました。規約に、other than pricing or availability information とあります。

 キャッシュが出来ないとなると毎回取得することになるのですが、1秒に1回というリクエスト制限があるために表示に時間がかかってしまいます。WordPress プラグインの仕様上記事単位の処理となり、1ページに複数の記事がある場合では1回のリクエストで一括して取得するという方法が使えません。

 現在の選択肢は次の2つ。

  1. 表示時間がかかってもいいから毎回リクエスト
  2. 価格情報および発送時期の表示機能をつけない

 今のところ1のやり方で出来ないかと検討しています。テンプレートに価格情報か発送時期のコードがあるときにだけリクエスト処理をすれば、使う人が選択することが出来ます。プログラムが汚くなりそうなのが心配ですが・・・。

 一番いいのはキャッシュをさせてくれるようになることですね。期限を1時間とか30分とかにしたとしても、アクセスの多い大手ブログでは効果が出ると思うのです。
 規約によると、表示された価格と発送時期を1時間ごとに強制更新する必要があるのだそうです。逆に言えば、1時間は同じままでもいいということですよね。だったら、「価格と発送時期は1時間までキャッシュ可能」とすればいいはず。

 いい解決手段があればぜひご連絡ください。

Comments (0)
Page 3 of 912345...Last »

HTML convert time: 4.547 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo