Standing on the Shoulder of Linus

Home / 2013 / 11月 / 01 / PHP逆引きレシピ第二版

PHP逆引きレシピ第二版

PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)をざっと読みました。

充実したサンプルコード

ほとんどのレシピにサンプルコードが掲載されています。コードは修正BSDライセンスで、http://2nd.php-recipe.com/download/からダウンロードできます。

コード内に説明コメントが多くあり、理解し易くなっています。たとえば json の項では、このようになっています。

<?php
# jQueryなど主要なJavaScriptライブラリを通じてのアクセスである
# (ブラウザからの直接アクセスでない)ことを確認します。
# この方法はJSONハイジャック攻撃など☆レシピ305☆(JSONのセキュリティについて知りたい)に対しても有効です。
if (! isset($_SERVER['HTTP_X_REQUESTED_WITH']) ||
    $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
  die(json_encode(array('status' => "不正な呼び出しです")));
}

# データを準備します。
$value = array(
  1 => array('item' => '台湾ラーメン', 'price' => 580, 'orders' => 113),
  2 => array('item' => '台湾ラーメン(アメリカン)', 'price' => 580, 'orders' => 72),
  3 => array('item' => 'ニンニクチャーハン', 'price' => 630, 'orders' => 87),
);

# Content-Typeを「application/json」に設定します。
header("Content-Type: application/json; charset=UTF-8");
# Internet ExplorerがContent-Typeヘッダーを無視しないようにします☆レシピ287☆(XSS対策をしたい)。
header("X-Content-Type-Options: nosniff");

# 可能な限りのエスケープを行ない、JSON形式で結果を返します。
echo json_encode(
  $value,
  JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
);
/* ?>終了タグ省略 ☆レシピ001☆(サーバーのPHP情報を知りたい) */

1つのレシピから、他のレシピについても学ぶことができるようになっています。

脆弱性のサンプルコードも

セキュリティ面でも配慮されています。脆弱性のあるコードも掲載されています。

<?php
# このサンプルには脆弱性が含まれています。このファイルは絶対に本番サーバーに
# アップロードしないでください。このページを利用して攻撃が可能です。

if (isset($_GET['filename']) && preg_match('/.txtz/', $_GET['filename'])) {
  readfile('/home/user/files/' . $_GET['filename']);
} else {
  die('不正なファイル指定がありました。');
}

書籍にはローカル環境の作り方も解説されているので、このコードを公開サーバに置く人はいないと思います。ただ、サンプルコード冒頭に

if ($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') {
  exit();
}

とでも書いておけば、万一公開サーバにアップしてしまった場合の保険になるかな、と思いました。

その他の雑感

テストの章が追加されています。phpunit と selenium について一通りの解説があります。phpunit も selenium も多くの機能がありますが、初級からのステップアップという本書では、ちょうど良い分量だと思います。

フォーム作成の箇所が HTML5 対応になるなど、初版と同じレシピもしっかりバージョンアップされているようです。

マルチバイト周りはもう少し詳しく記述されていると良かったと思います。私が個人的によく使うmb_strimwidth の記載が無かったですし。

smarty が20ページと、かなり多くある割には他のテンプレートが全く触れられていないのはちょっと不思議でした。

関連

Posted in bookreview | Tagged テスト, 名古屋
← 電子書籍割引キャンペーン Kindle Countdown Deals WordPress Advanced Custom Fields プラグインで不要なフィールドを削除する →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 6年使ったイーモバイル(Y!mobile)を解約手続。店頭でSIM返却
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.