2014年10月15日水曜日

気づけばプロ並みPHP 副読本:お助け電子BOOKへの寄稿の顛末

谷藤賢一さんの著書『気づけばプロ並みPHP~ショッピングカート作りにチャレンジ! 』に、発売1周年の謝恩キャンペーンとして『副読本:お助け電子BOOK』が公開されました(*1)。私はこの副読本の中で、『第2章 【徳丸 浩氏 スペシャル寄稿】安全なWebアプリケーションのために』を寄稿しています。このエントリでは、寄稿の顛末を報告したいと思います。

動機

私が本書『気づけばプロ並みPHP』を購入したのは昨年の10月29日ですから、本書が出版されてまもなく、今から約1年前です。私は本書を一読して、セキュリティ上の多数の問題があることに気がつきました。
以前は、セキュリティ上の問題が多い本は書評をブログ記事として書くことも多かったのですが、この際は書評という形にするのはためらいがありました。その理由は以下の様なものです。
  • 私のブログの読者層はセキュリティに関心の高い方たちであり、本書の読者とは重ならない
  • 著者に私の意図が伝わるかが疑問
  • 別の著者の方と書評が原因でトラブルになりかけたことがある
私は衝動的に、著者の谷藤さんの経営する株式会社C60(シーロクマル)に押しかけていって、ちょっとこの本は問題ですよと直接伝えようかとも思いました。前述のように別の著者の方とは書評が元でトラブルになりかけましたが、谷藤さんとはそうならないだろうという直感がありました。谷藤さんはプログラミングの初心者にPHPを習得してもらうことを通じて、若者の自立とキャリア形成の支援をされています。言わば、PHPの講習を通じて社会を少しでも変えようという活動をなさっている方なので、きちんとお話すれば、当方の意図はわかってくださるのではないかと思いました。
しかしこの時は、忙しさにかまけて、行動に移すことはありませんでした。

きっかけ

ところが、とある偶然から、ことは動き始めました。PHPカンファレンス関西2014のスピーカーを依頼されて、今年の6月28日に会場の大阪産業創造館を訪問した時のことです。自分の出番を終えて、ロビーでPHP界隈の方々と談笑していると、谷藤さんの方から挨拶に来られたのです。
名刺交換をしながら、私が「いや、実は私のほうから谷藤さんの会社に乗り込もうかと思っていたのですがね」と申し上げたところ、「ぜひ乗り込んできてください」とのお返事。その後頂戴したメールにもその旨記載されていたので、それではということで、谷藤さんとの面会が決まりました。

面会

7月某日、谷藤さんの会社で、リックテレコムの担当編集者を交えて谷藤さんと面会をいたしました。私からは、本書の内容にセキュリティ上の問題が多いこと、開発の現場で多くの開発者が「コピペ」でプログラムを作り、そのため「お手本」に脆弱性があると、その脆弱性ごとコピペされて脆弱なサイトがネットに公開されてしまうこと、などをお伝えしました。
谷藤さんからは、セキュリティが重要であることは承知しているが、自分の扱う受講生のレベルではセキュリティまでは無理であると考えていること、また開発現場のコピペの現状については承知しておらず、驚いているというお話がありました。
ここで、リックテレコムの担当編集者からは、実は本書を「プロ並み」というタイトルにしてしまったこともあり多くの問い合わせを受けていること、このため、フリーの電子書籍の形でFAQの副読本を発行する計画があることを伺いました。そして、徳丸の示した内容も、その副読本に含めさせてもらえないだろうかという提案をいただきました。
私はその提案に同意し、そのために私が調べた内容をメモとして提供することになりました。

副読本

私のメモは元々作成していたものをすぐにお渡ししたのですが、せっかく乗りかかった船なので、もう少し詳しく調べたいと考えました。本書のソースは、断片的な形でしか記載されておらず、実際に打ち込んでみないと全容がわからない状態でした。このため、当方からデジタルデータとしてソースコードの提供を希望し、承諾されました。私はお預かりしたソースを実際に動かしたり、ソースコードを確認するなどの方法でセキュリティ上の問題を調べ、先のメモに追記しました。また、当初脆弱性の疑いを持っていた箇所が、完全なソースを確認すると脆弱性ではないことがわかった箇所もありました。なお、現在は、こちらのページから、ソースコードがダウンロードできるようになっています。
私が提供したものは、あくまで内容のみを記した簡潔なメモでしたので、徳丸の負担を下げたいという担当編集者の配慮から、そのメモを「読み物」の形に仕上げる上では、編集という形で編集者の加筆がかなり入っていることを報告いたしましす。しかし、できあがった文章を私はチェックしておりますので、担当した第2章の文責は徳丸にあります。

概要

私の担当である副読本第2章の概要は下記のとおりです。

2-1 本アップには欠かせない——本書プログラムの脆弱性対策
 ◆P088 スタッフの削除機能にCSRF脆弱性
 ◆P100 商品追加機能に2種の脆弱性
 ◆P113ほか HTMLエスケープ処理の漏れ
 ◆P233 自動返信メールにメールヘッダインジェクション脆弱性
 コラム(1)「サニタイジング」という用語について

2-2 中級以上を目指す方へ——プログラム品質を高める改善案
 ◆P061・P113・P232 HTMLエスケープを行う場所について
 ◆P061 htmlspecialcharsの引数
 ◆P061他 データベース接続に例外処理の設定を
 ◆P065 データベース接続の文字エンコーディング指定方法
 ◆P100 正規表現による全体一致チェック
 ◆ 商品を購入したらカートは空になっているべき
 ◆ 商品画像のファイル名にルールがほしい
 ◆P268 注文データ漏えいの恐れあり
 ◆ 許可されていない文字がDBに登録されてしまう
 コラム(2) MD5によるパスワードの暗号化

まとめ、感想

一月ほど前に、はせがわようすけさんの以下のツイートに対して、
以下のように返答していますが、上記を想定した発言でした。

今回は、ひょんなきっかけから、「著者とのコミュニケーション」が実現されたことになります。私からは多くの指摘をさせていただきましたが、内容についての質問はあったものの、私の指摘はすべて掲載されています。谷藤さんと担当編集者の懐の深い対応に感謝申し上げます。

とは言え、課題は山積みです。私は開発入門者が最初に目にする機会の多いPHP入門書に注目してウォッチングを続けていて、以前から少し改善は見られる(参照)ものの、望ましい水準にはまだまだというところです。しかし、様々な形で著者の方々にセキュリティの重要性が伝わることで、改善が図られていくものと期待をしています。

*1 こちらのサイトにダウンロード方法が書かれています。個人情報として氏名とメールアドレスの入力が必要です。

0 件のコメント:

コメントを投稿

フォロワー