BASHの脆弱性でCGIモードで動いてるPHPにアレさせてみました

タイトルはパクリ
元記事: BASHの脆弱性でCGIスクリプトにアレさせてみました – ブログ – ワルブリックス株式会社

sakura のレンタルサーバが cgi モードで php 動かしてるよなーと思ってテストしてみたらできました。
# テストスクリプトは削除済みです。
続きを読む

WordPress プラグインで使う定数値はヘッダ部分で管理して get_file_data() で取得すると良いと思うけど、どんなもんでしょう

えー、タイトルの通りなんですが WordPress でプラグイン開発している時に非常に便利な関数として get_file_data() ってのがあります。
いま、久しぶりに Codex みたら、ほとんど説明を放棄してますね。
最近出た WordPressプラグイン開発のバイブルっていう本でちらっと触れておいたので、そこから引用します。

$plugin_data = get_file_data( __FILE__, array( 'version' => 'Version'));
$plugin_version = $plugin_data['version'];

プラグインやテーマのヘッダー情報を取得するには get_file_data() 関数を使用します。
プラグインの冒頭にはコメント形式でプラグイン名やバージョン、テキストドメインがヘッダー情報として書かれています。
たとえば、プラグインのバージョン情報をこちらから読み出し、wp_enqueue_script() 関数で JavaScript のバージョン情報を変更したり、翻訳ファイルのテキストドメインやドメインパスなどを取得して load_textdomain() 関数で翻訳ファイルを読み込むときに使用できると思います。
プラグインのヘッダー情報を使って一元管理ができるため、ソース中にハードコードする必要がなくなります。
また、他のプラグインやテーマのバージョンに依存するような処理を書きたい場合にも使えるでしょう。

WordPress に最初からついてくるプラグイン Hello Dolly のメタ情報を取得した結果は以下の通りです。

$data = get_file_data( ABSPATH.'wp-content/plugins/hello.php',
	array( 'name' => 'Plugin Name',
		'version' => 'Version',
		'uri' => 'Plugin URI',
		'description' => 'Description',
		'author' => 'Author',
		'author_uri' => 'Author URI',
		'textdomain' => 'Text Domain',
		'textdomain_path' => 'Domain Path',
	));
var_dump($data);
array(8) {
  ["name"]=>
  string(11) "Hello Dolly"
  ["version"]=>
  string(3) "1.6"
  ["uri"]=>
  string(41) "http://wordpress.org/plugins/hello-dolly/"
  ["description"]=>
  string(295) "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page."
  ["author"]=>
  string(14) "Matt Mullenweg"
  ["author_uri"]=>
  string(13) "http://ma.tt/"
  ["textdomain"]=>
  string(0) ""
  ["textdomain_path"]=>
  string(0) ""
}

実は、この get_file_data() 関数なんですが、WordPress プラグインの規定のヘッダ情報だけでなく、独自にセットした情報も取ってくることができるんです。
続きを読む

WordPress プラグイン開発のバイブル

WordPress プラグイン開発のバイブル

私が執筆した WordPress 関係の本としては二冊目となる「WordPressプラグイン開発のバイブル」が 7/22 に発売されました。
これは 宮さん西川さん三好さん達との共著になります。

以下に序文を引用します。

WordPressは世界の7,000万サイト以上で使用されており、CMSシェアにして60%にもなる、世界で最も多く使用されているCMSです。
このWordPressのシェアを支えるもっとも大きな要因の1つは、WordPressがオープンソースであるからです。
インターネットの豊かさを支えるものはコンテンツです。
世界中の数々の良質なコンテンツが現在のインターネットの豊かさを形成しており、現在もめざましいスピードで進化しています。
そして、サーバーやミドルウエア、そしてWordPressのようなCMSは、これらのコンテンツをささえるための縁の下の力持ちでしかありません。
しかし、良質なコンテンツを作るには優れたツールが必要で、それらのツールの開発には、膨大なコストが必要です。
そういったコスト負担を分担しあおうという考え方から、私たちのウェブ業界はオープンソースという考え方を取り入れ、積極的に活用するようになりました。
そうした背景の中で、優れたツールが生まれ、それを土台にしてさらに良質なコンテンツが生まれているのが、現在のインターネットです。
さらにいえば、WordPressが採用するライセンスはGPLです。
このGPLライセンスは、ユーザーに対して自由を保証することを主目的としたライセンスであり、ユーザーは利用規約やライセンス条項などを気にすること無く自由な目的に使用することができます。
WordPressはGPLを採用しているからこそ、現在のシェアを獲得していると私たちは考えています。
そんな中で、日本においては、毎月と言ってもいいほどのたくさんのWordPress関連書籍が発売され、イベントやセミナーなども全国各地で毎週のように開催されています。
WordPressコミュニティが開催する公式なイベントWordCampには毎回1000名を超えるほどの参加者が集まるようにもなってきました。
しかしながら、日本国内においてこれらの書籍やイベントがターゲットとする層のほとんどが単なるWordPressユーザーであり、開発者をターゲットとしたものがほとんどありません。
世界中のエンジニアが自らの成果物を無償で公開しだれでも利用可能にするのはなぜでしょうか?
そこには何らかのメリットや意図がかならずあるはずです。
本書は、日本で初めてとも言える開発者をターゲットとしたWordPressの専門書です。
私たちは本書をとおして、開発者からみたオープンソースのメリットをみなさんと共有していきたいと考えています。
そのため、これまでのWordPress本で紹介されてきたようなググれば分かる内容の解説には、それほど重きをおいていません。
それらはWordPressのバージョンアップなどによりすぐに陳腐化していく内容だと私たちは考えており、もっと普遍的な内容を取り扱っていきたいと考えてきました。
たとえば、本書で紹介されているセキュリティ対策やエラー処理は、みなさんが開発するプラグインの信頼性を向上にすくなからず貢献できるはずです。
コーディングスタンダードやPHPunitを使用したテスト方法は、プラグインのメンテナンス性を向上させるための手助けとなります。
WP-CLIやGruntなどのサードパーティーのツールや、Vagrantなどの開発環境は、開発におけるワークフローを劇的に改善するでしょう。
公式ディレクトリへの登録方法や国際化などは、みなさんに世界への扉を開くことになるはずです。
もちろん、WordPress APIにつきましても、極力たくさん網羅できるように努力しました。
日本国内においてはWordPress開発者が十分に多いとはいえません。
本書の重要なターゲットは、既存のWordPressユーザーというよりもWordPressを使ったことがないPHP開発者です。
ある程度経験を積んだプログラマーなら、目次をさっとみただけで、必要なキーワードが手に入ることを目指して書いてきたつもりです。

続きを読む

スクリーンショット(2014-07-04 10.03.37)

dogmap.jp を t1.micro から t2.micro に変更してみました

AWS から 7/2 に新しいインスタンスタイプ T2 インスタンスがリリースされました。
【AWS発表】バースト可能な性能を持つ新しい低コストEC2インスタンス

dogmap.jp は、網元の実証実験も兼ねて、網元の t1.micro インスタンスで稼働させているのですが、アクセスが集中して負荷が高まってバーストした後、一定時間極端に性能が悪化するという問題がありました。
# これは t1.micro インスタンスの特性です。
これ結構辛くて、表側では Nginx のリバースプロキシキャッシュでなんとか凌いでいても、WordPress のダッシュボードにアクセスできないとかの状況に陥ることがしばしばあったんですよね。

T2インスタンスでも t1.micro 同様に負荷がかかったときに自動的にバーストします。
ただし、バースト可能な時間には制限があって、これを管理するために新たに CPU Credit という仕組みが追加されました。
簡単に言うと

  • 負荷が高くなく CPU がベースライン性能にとどまっている場合、CPUクレジット残高が貯まっていく
  • 負荷が高まった場合、CPUクレジットを消費してバーストする
  • 1CPUクレジットで1分間バースト可能
  • CPUクレジット残高が無くなった場合は CPU 性能はベースライン性能にとどまる
  • 未使用のCPUクレジットは、最大24時間有効

という感じらしいです。

名前 vCPUs ベースライン性能 1時間あたりのCPUクレジット
t2.micro 1 10% 6
t2.small 1 20% 12
t2.medium 2 40% 24

CPUクレジット残高については、Cloud Watch で確認することができます。
「CPU Credit Usage (使用量)」「CPU Credit Balance (残高)」という項目が追加されているので、そちらを参照してください。

2014-7-18 追記
Amazon MarketPlace からも HVM 版の網元AMIが利用できるようになりました。
WordPress powered by AMIMOTO (HVM)
t1.micro などの m1 インスタンスなどの HVM に対応していないインスタンスタイプはご利用になれません。
そちらが必要な場合は、従来の PVM 版をご利用ください。
続きを読む

WordPress でデータ連係するときのスニペット

実は、今夏にSBクリエイティブさんから発売される予定の「WordPress Plugin 本(タイトル仮)」を宮さん西川さん三好さん達と書いてました。
宮さんはすでにリーク済みですね。
管理画面におけるエラーメッセージの表示 | firegoby

僕が担当したのは、17章目の「プラグインクックブック」がメインになります。
ここでは WordPress プラグイン作成時に使ってるコードをサンプルコードとして提示して、それを説明するって感じで書いてます。
編集の人にも「一部公開しても良いよー」って言われたので、一部を公開しますね。

続きを読む

GitLab

GitLab を Amazon Linux にインストールする

オープンソースの Git リポジトリ管理システム GitLab を Amazon Linux にインストールしたので、手順をメモ。
といっても、ほとんど以下の URL を参考にしたので、ここではインストール時に引っかかった注意点など
Amazon Linux 2013.09 に GitLab6.1 をインストール – OTメモ帳

ところで digitalcube って会社では、様々なプロダクトがインストール済みの AMI を AWS Marketplace で公開してるんだけど、ここでも GitLab が公開されてるから、インストールが面倒な人はそこから起動した方が良いと思うよ(ステマ)。
AWS Marketplace: Search Results

GitLab も、今日公開されたし – GitLab on AWS Marketplace
Marketplace 版の GitLab は、初期アカウントは admin@local.host でパスワードは起動したインスタンスのインスタンスIDになってます。
GitLab の起動に時間がかかるので、最初 503 ステータスが返ってくるかもだけど、ちょっと待ってから再試行すれば GitLab のログイン画面が表示されるので、試してみてください。

続きを読む

Web サイトのメンテナンス中画面の出し方

しょっちゅう必要になるので、メモ書き程度に
参考にしたのは、以下の URL です。

前提としてメンテナンス中画面として表示する際に使用する html は以下のファイルを使うものとします。

  • maintenance.html
  • style.css
  • /img/corp_logo.png

また、以下の IP アドレスからのアクセスは管理者からなのでメンテナンス中画面を表示しないものとします。

  • 192.168.0.4
  • 192.168.0.5

続きを読む

スクリーンショット(2014-03-20 20.24.45)

OSS版 fc2blog を Nginx で

いきなり fc2 ブログがソースを OSS として公開したらしいので Nginx + php-fpm で動かしてみました。
fc2blog/blog

実際に動かしてみたサイトがこれ
test.dogmap.jp

Nginx とか PHP とか入れるの面倒くさかったので、サーバは網元を流用。
以下、手順です。
続きを読む

MySQL バイナリログからデータを復旧

MySQL で作業してるときにうっかりオペミスしてしまったときの対処方法。
作業前にダンプ取ってて、作業終了後すぐにオペミスに気づいた場合は、そのダンプから戻せば良いですが、ダンプ取ったのが結構前だったとか、オペミスに気づいたのが時間をおいてからだったとかって時の復旧方法です。
前提条件として、以下の状況だった場合のみです。バイナリログを取ってない場合はあきらめましょう。

  • バイナリログを取っている( /etc/my.cnf で log-bin=mysql-bin とか設定してある )
  • mysqldump 等でバックアップしている
  • バックアップ時点でのバイナリログの書き込み位置を保存している。またはバックアップした日時が特定できる

参考 : unoh.github.com by unoh

続きを読む

Network Diagram

ストリーミングファイルだけ他のサーバから配信する

動画ファイルの配信だけ Web サーバ本体では無くて、別のサーバから配信したいけど WordPress とかいじりたくなかったので Nginx だけいじって対応しましたよってお話です。
いわゆるオレオレCDN( Nginxを使ったオレオレCDNの構築 )ですな。

構成的には上図のようになります。
要望的には html とか css, js, なんかは web サーバから配信したいんだけど、ネットワーク帯域を消費しまくる動画ファイル ( mp4, webm, ogv, flv ) だけは別サーバで配信したい。
素早く対応したいから WordPress のプラグインとか作らないで、Nginx の設定だけで済ませたいって感じです。

どうやって実現したかというと
続きを読む