『PHP逆引きレシピ』とセキュリティのこと

1,987 views

Published on

PHPカンファレンス2009でのプレゼン資料。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,987
On SlideShare
0
From Embeds
0
Number of Embeds
220
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

『PHP逆引きレシピ』とセキュリティのこと

  1. 1. 『PHP逆引きレシピ』と セキュリティのこと 2009/9/5 Kenji Suzuki@PHP Conference Japan 2009
  2. 2. 1 『PHP逆引きレシピ』とは?
  3. 3.
  4. 4. 3 『PHP逆引きレシピ』とは?「やりたいこと」を目的別にまとめたレシピ集具体的なサンプルプログラムを交えてわかりやすく解説2009年6月29日に翔泳社より発売著者が全員、名古屋地域の人公式サイト http://php-recipe.com/
  5. 5. 4 こんな人、こんな用途に最適こんな人に PHPを学習中の初級者 開発経験が少ないPHPプログラマー セキュリティ対策について学習し直したい中級者こんな用途に 開発者向けの学習・研修 開発時のリファレンスとして 専門学校や大学のプログラミング学習のサブテキスト
  6. 6. 5 こんな人は対象外 全くのWebプログラミング初心者 PHP上級者
  7. 7. 6 識者のコメント大垣 靖男さん— 『はじめてのPHP言語プログラミング入門』、  『PHP ポケットリファレンス』の著者私も似たような本(PHPポケットリファレンス – 技術評論社)から出版させて頂いているので、この種類の書籍の執筆がかなり大変であることは良く知っています。これだけの内容をこの一冊にまとめたのは素 晴らしいと思います。つまずいた時の時間節約の為に、初心者が購入する本としてお勧めできると思います。
  8. 8. 7 識者のコメント下岡 秀幸さん— 『はじめてのPHPプログラミング基本編』、  『PHPによるデザインパターン入門』の著者「プログラム書いたことありません」という、全くのプログラミング初級者ではちょっと厳しいかも知れませんが、「勉強しながら自分でちょっとずつコーディ ングしている」というぐらいの人なら「次のステップ」に最適です。あと、サンプルコードはオフィシャルサポートサイトからダウンロードできますが、実際に 自分で手を動かして書いてみると効率よく理解できるんじゃないかと思います。
  9. 9. 8 識者のコメント徳丸 浩さん— 『Webアプリケーションのセキュリティ完全対策』の著者書かれている内容すべてに同意するわけではないが、少なくとも、本書で書かれている方法で書いてセキュリティホールが混入するということは、ほとんどないのではないか。
  10. 10. 9 識者のコメント小飼 弾さんPHP本は、これ一冊あれば十分だと強く感じた。
  11. 11. 10 識者のコメント小飼 弾さんPHP本は、これ一冊あれば十分だと強く感じた。PHPを使うにしても、使わないにしても。
  12. 12. 11 この本の目的「PHP使いには初級者が多い。いろいろな敷居が低い。底上げできて、みんな中級者になったら、各方面からdisられる事もなくなる」 -- shimookaさん ↓  中級者を増やそう!
  13. 13. 12 そのために実用的なサンプルコードセキュアなサンプルコード ↓  お手本となるサンプルコードにしよう! 本当に実務で使える定番の本にしよう!
  14. 14. 13 PHP書籍の現状 ほとんどの書籍に脆弱性 脆弱性のない書籍の方がまれ  例:   print($_POST[name]);   echo "こんにちは".$POST["name"]."さんn";   $id = htmlspecialchars($_GET[id]);   $query = "delete from myblog where id=" .$id . "";   $result = mysql_query($query) or exit("SQLエラー");   extract($_POST);
  15. 15. 14 PHP書籍の現状多くの書籍が、最初に脆弱なコードで説明し、後の方でおまけ的にセキュリティに触れる入門書なのに、サンプルコードに脆弱性がある旨しか書かれていないあるいは、まったくセキュリティに触れていないものもある ↓  脆弱プログラマーを増殖させる原因?
  16. 16. 15 『PHP逆引きレシピ』では?セキュリティへの取り組み すべてのサンプルコードで可能な限り脆弱性をゼロにする おまけ的セキュリティを否定 セキュリティの章以外でもできるだけセキュアなコード セキュリティついての章(68ページ)を設け詳説 主要な攻撃手法について、具体的な攻撃方法と防御方法 を解説
  17. 17. 16 セキュリティへの取り組み第8章 セキュリティ8.1 セキュリティ対策の基本 229 セキュリティ対策の基本を知りたい 230 入力値の検証方法を知りたい 231 文字列を比較する場合の注意点を知りたい8.2 PHPの設定 232 本番環境でのエラー出力の設定方法は? 233 セーフモードとは? 234 より安全なphp.ini設定を知りたい
  18. 18. 17 セキュリティへの取り組み 8.3 セキュリティ対策 235 パラメータ改竄とは? 236 XSSとは? 237 XSS対策をしたい 238 CSRFとは? 239 NULLバイト攻撃とは? 240 SQLインジェクションとは? 241 OSコマンドインジェクションとは? 242 ディレクトリトラバーサルとは? 243 インクルード攻撃とは? 244 eval利用攻撃とは? 245 メールヘッダーインジェクションとは? 246 Cookieを安全に利用したい 247 セッションハイジャック対策をしたい 248 セッション固定化攻撃を防ぎたい 249 SSL利用時にセッションを安全に利用したい 250 Ajaxのセキュリティについて知りたい
  19. 19. 18 セキュリティ対策の基本(レシピ229) 1. 入力値の厳格な検証 2. 出力時の適切なエスケープ処理 3. 多重防御
  20. 20. 19 入力値の厳格な検証 入力値が想定する範囲のものか検証する プログラミングの基本 以下も確認しましょう NULLバイトがないこと 文字エンコード
  21. 21. 20 出力時の適切なエスケープ処理 他のシステムに出力する場合は、そのシステムに 合った方法で特殊文字をエスケープ処理する必要 がある プログラミングの基本
  22. 22. 21 HTMLへの出力の場合 「<」「>」「&」などの特殊文字は文字参照に変換する必要がある 以下のコードは「&」を文字参照に変換しておらず正しくない  $str = 7&i;  echo $str; 外部からの入力にのみhtmlspecialchars()を通すのはナンセンス 原則すべての変数にhtmlspecialchars()を通すべき
  23. 23. 22 SQLへの出力 「」などの特殊文字は、エスケープ処理する必要がある 以下のSQLは、エスケープ処理をしておらず正しくない  $sql = sprintf(  "SELECT * FROM user WHERE user = %s AND password = %s",  $_POST[id], $_POST[password]); ユーザ名「McDonalds」さんは認証できない エスケープ処理しないのは単なるバグ 原則は、プリペアドステートメントを使うべき
  24. 24. 23 多重防御 自分を過信しない ひとつの対策に賭けたりしない 例、重要な処理の場合は、ユーザーにパスワードを 再入力してもらう
  25. 25. 24 『PHP逆引きレシピ』では? 必要な部分は、手抜きせず、htmlspecialchar()を通す  function h($string) { // HTMLでのエスケープ処理をする関数    return htmlspecialchars($string, ENT_QUOTES);  } メール送信フォームなど、そのまま使われそうなサンプルでは、 NULLバイトと文字エンコードもチェック
  26. 26. 25 しかし書籍の限界 ページ数に限界がある HTMLでのエスケープ処理 本書でのコーディング規約: 同一ファイルで変数を定義 しているもの以外は、ブラウザに出力するすべての変 数をhtmlspecialchars()でエスケープする処理を入れる しかし、これは貧民的プログラミング思考(by 高木浩光 氏)であり好ましくない 本来は、すべての変数をエスケープすべき NULLバイトや文字エンコードのチェック すべての入力のあるサンプルには入れられなかった
  27. 27. 26 しかし書籍の限界 ある程度古いバージョンもカバーする必要がある MySQLi関数が使えなければ、プリペアドステートメントは使 えない MySQL関数を使ったサンプルを入れざるを得ない
  28. 28. 27 『PHP逆引きレシピ』はセキュアか?現在、脆弱性は報告されていません多くの方からコメントや感想を頂いていますが、概ね高い評価を頂いています ↓ しかし、この本はまだ出版されたばかりで、読まれた方も少ないと思います是非、実際に本をご覧になってコメントをお願いしたいと思います次の版があれば、さらによいものにしたいと思います
  29. 29. 28 Amazonのレビューより間違いなくPHPの書籍の中でNO.1の一冊です。2009/7/31 By danieru自分はPHPの本を10冊近く持っていますが間違いなくNO.1の本だと思います。その十冊はもちろんPHP5に対応していて、高評価されている比較的新しい本を買ったのでおそらくこの本はPHPの本のなかで最高の本だと思います。...略...この本は一冊目に使う本じゃないと思いますが、一冊目と一緒に買うことをおすすめします。PHPを勉強している人なら必ず買ったほうがいいと思います。そのくらいおすすめできます。いやーようやくでましたかこういう本が。

×