SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
『PHP逆引きレシピ』と
 セキュリティのこと



   2009/9/5 Kenji Suzuki
@PHP Conference Japan 2009
1   『PHP逆引きレシピ』とは?
2
3    『PHP逆引きレシピ』とは?

「やりたいこと」を目的別にまとめたレシピ集
具体的なサンプルプログラムを交えてわかりやすく解説
2009年6月29日に翔泳社より発売

著者が全員、名古屋地域の人
公式サイト http://php-recipe.com/
4   こんな人、こんな用途に最適

こんな人に
  PHPを学習中の初級者
  開発経験が少ないPHPプログラマー
  セキュリティ対策について学習し直したい中級者

こんな用途に
  開発者向けの学習・研修
  開発時のリファレンスとして
  専門学校や大学のプログラミング学習のサブテキスト
5   こんな人は対象外


    全くのWebプログラミング初心者
    PHP上級者
6    識者のコメント

大垣 靖男さん
— 『はじめてのPHP言語プログラミング入門』、
  『PHP ポケットリファレンス』の著者

私も似たような本(PHPポケットリファレンス – 技術評論社)から出
版させて頂いているので、この種類の書籍の執筆がかなり大変で
あることは良く知っています。これだけの内容をこの一冊にまとめ
たのは素 晴らしいと思います。つまずいた時の時間節約の為に、
初心者が購入する本としてお勧めできると思います。
7    識者のコメント

下岡 秀幸さん
— 『はじめてのPHPプログラミング基本編』、
  『PHPによるデザインパターン入門』の著者

「プログラム書いたことありません」という、全くのプログラミング初
級者ではちょっと厳しいかも知れませんが、「勉強しながら自分で
ちょっとずつコーディ ングしている」というぐらいの人なら「次のス
テップ」に最適です。あと、サンプルコードはオフィシャルサポート
サイトからダウンロードできますが、実際に 自分で手を動かして書
いてみると効率よく理解できるんじゃないかと思います。
8     識者のコメント


徳丸 浩さん
— 『Webアプリケーションのセキュリティ完全対策』の著者

書かれている内容すべてに同意するわけではないが、少なくとも、
本書で書かれている方法で書いてセキュリティホールが混入する
ということは、ほとんどないのではないか。
9       識者のコメント

小飼 弾さん

PHP本は、これ一冊あれば十分だと強く感じた。
10       識者のコメント

小飼 弾さん

PHP本は、これ一冊あれば十分だと強く感じた。
PHPを使うにしても、使わないにしても。
11     この本の目的

「PHP使いには初級者が多い。いろいろな敷居が低い。底上
げできて、みんな中級者になったら、各方面からdisられる事も
なくなる」
 -- shimookaさん

              ↓ 
          中級者を増やそう!
12   そのために

実用的なサンプルコード
セキュアなサンプルコード

               ↓ 
     お手本となるサンプルコードにしよう!
     本当に実務で使える定番の本にしよう!
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);
14   PHP書籍の現状

多くの書籍が、最初に脆弱なコードで説明し、後の方でおまけ
的にセキュリティに触れる
入門書なのに、サンプルコードに脆弱性がある旨しか書かれて
いない
あるいは、まったくセキュリティに触れていないものもある

            ↓ 
     脆弱プログラマーを増殖させる原因?
15    『PHP逆引きレシピ』では?


セキュリティへの取り組み
  すべてのサンプルコードで可能な限り脆弱性をゼロにする
    おまけ的セキュリティを否定
      セキュリティの章以外でもできるだけセキュアなコード

 セキュリティついての章(68ページ)を設け詳説
   主要な攻撃手法について、具体的な攻撃方法と防御方法
   を解説
16   セキュリティへの取り組み

第8章 セキュリティ
8.1 セキュリティ対策の基本
 229 セキュリティ対策の基本を知りたい
 230 入力値の検証方法を知りたい
 231 文字列を比較する場合の注意点を知りたい
8.2 PHPの設定
 232 本番環境でのエラー出力の設定方法は?
 233 セーフモードとは?
 234 より安全なphp.ini設定を知りたい
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のセキュリティについて知りたい
18   セキュリティ対策の基本(レシピ229)

     1. 入力値の厳格な検証
     2. 出力時の適切なエスケープ処理
     3. 多重防御
19   入力値の厳格な検証

     入力値が想定する範囲のものか検証する
     プログラミングの基本
     以下も確認しましょう
       NULLバイトがないこと
       文字エンコード
20 出力時の適切なエスケープ処理

  他のシステムに出力する場合は、そのシステムに
  合った方法で特殊文字をエスケープ処理する必要
  がある
  プログラミングの基本
21          HTMLへの出力の場合

   「<」「>」「&」などの特殊文字は文字参照に変換する必要がある
   以下のコードは「&」を文字参照に変換しておらず正しくない

  $str = '7&i';
  echo $str;

   外部からの入力にのみhtmlspecialchars()を通すのはナンセンス
   原則すべての変数にhtmlspecialchars()を通すべき
22          SQLへの出力

   「'」などの特殊文字は、エスケープ処理する必要がある
   以下のSQLは、エスケープ処理をしておらず正しくない

  $sql = sprintf(
  "SELECT * FROM user WHERE user = '%s' AND password = '%s'",
  $_POST['id'], $_POST['password']);

   ユーザ名「McDonald's」さんは認証できない
   エスケープ処理しないのは単なるバグ
   原則は、プリペアドステートメントを使うべき
23   多重防御

 自分を過信しない
 ひとつの対策に賭けたりしない
 例、重要な処理の場合は、ユーザーにパスワードを
 再入力してもらう
24       『PHP逆引きレシピ』では?

   必要な部分は、手抜きせず、htmlspecialchar()を通す

  function h($string) { // HTMLでのエスケープ処理をする関数
    return htmlspecialchars($string, ENT_QUOTES);
  }

   メール送信フォームなど、そのまま使われそうなサンプルでは、
   NULLバイトと文字エンコードもチェック
25      しかし
書籍の限界
  ページ数に限界がある
    HTMLでのエスケープ処理
      本書でのコーディング規約: 同一ファイルで変数を定義
      しているもの以外は、ブラウザに出力するすべての変
      数をhtmlspecialchars()でエスケープする処理を入れる
      しかし、これは貧民的プログラミング思考(by 高木浩光
      氏)であり好ましくない
      本来は、すべての変数をエスケープすべき
    NULLバイトや文字エンコードのチェック
      すべての入力のあるサンプルには入れられなかった
26     しかし

書籍の限界
  ある程度古いバージョンもカバーする必要がある
    MySQLi関数が使えなければ、プリペアドステートメントは使
    えない
      MySQL関数を使ったサンプルを入れざるを得ない
27 『PHP逆引きレシピ』はセキュアか?
現在、脆弱性は報告されていません
多くの方からコメントや感想を頂いていますが、概ね高い評価
を頂いています

             ↓ 

しかし、この本はまだ出版されたばかりで、読まれた方も少な
いと思います
是非、実際に本をご覧になってコメントをお願いしたいと思いま
す
次の版があれば、さらによいものにしたいと思います
28     Amazonのレビューより
間違いなくPHPの書籍の中でNO.1の一冊です。
2009/7/31 By danieru

自分はPHPの本を10冊近く持っていますが間違いなくNO.1の本だと思
います。その十冊はもちろんPHP5に対応していて、高評価されている
比較的新しい本を買ったのでおそらくこの本はPHPの本のなかで最高
の本だと思います。
...略...
この本は一冊目に使う本じゃないと思いますが、一冊目と一緒に買うこ
とをおすすめします。
PHPを勉強している人なら必ず買ったほうがいいと思います。そのくら
いおすすめできます。
いやーようやくでましたかこういう本が。

Contenu connexe

En vedette

Ms project 2010
Ms project  2010Ms project  2010
Ms project 2010vrushalis
 
Peru culture
Peru culturePeru culture
Peru culturedgavin0
 
Prezentare PretScurtari.ro
Prezentare PretScurtari.roPrezentare PretScurtari.ro
Prezentare PretScurtari.roIn ZonaTa
 
フル ページ写真
フル ページ写真フル ページ写真
フル ページ写真barutezu
 
畢老師的蘋果
畢老師的蘋果畢老師的蘋果
畢老師的蘋果Javan Xu
 
Computer Architecture Seminar
Computer Architecture SeminarComputer Architecture Seminar
Computer Architecture SeminarNaman Kumar
 
Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...
Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...
Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...fbtslides
 
Spectrum deck v5.3
Spectrum deck v5.3Spectrum deck v5.3
Spectrum deck v5.3SLaM Iam
 
Outsourcing & Offshoring
Outsourcing & OffshoringOutsourcing & Offshoring
Outsourcing & OffshoringMorten Munk
 
ATTACK Toolkit Webinar on Big Tobacco's Emerging Marketing
ATTACK Toolkit Webinar on Big Tobacco's Emerging MarketingATTACK Toolkit Webinar on Big Tobacco's Emerging Marketing
ATTACK Toolkit Webinar on Big Tobacco's Emerging MarketingAlex T.
 
CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)kenjis
 
Linguagem sql
Linguagem sqlLinguagem sql
Linguagem sqlTic Eslc
 
Как стать резидентом КРИТБИ? критби
Как стать резидентом КРИТБИ? критбиКак стать резидентом КРИТБИ? критби
Как стать резидентом КРИТБИ? критбиAlexander Verhozin
 
Automating the Use of Web APIs through Lightweight Semantics
Automating the Use of Web APIs through Lightweight SemanticsAutomating the Use of Web APIs through Lightweight Semantics
Automating the Use of Web APIs through Lightweight Semanticsmmaleshkova
 
Web API Classification Survey
Web API Classification Survey Web API Classification Survey
Web API Classification Survey mmaleshkova
 
Fresh Business Thinking Social Media Event - Julie Hall
Fresh Business Thinking Social Media Event - Julie Hall Fresh Business Thinking Social Media Event - Julie Hall
Fresh Business Thinking Social Media Event - Julie Hall fbtslides
 
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference BostonSales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference BostonKevin Purcell
 

En vedette (20)

Ms project 2010
Ms project  2010Ms project  2010
Ms project 2010
 
Peru culture
Peru culturePeru culture
Peru culture
 
Prezentare PretScurtari.ro
Prezentare PretScurtari.roPrezentare PretScurtari.ro
Prezentare PretScurtari.ro
 
フル ページ写真
フル ページ写真フル ページ写真
フル ページ写真
 
畢老師的蘋果
畢老師的蘋果畢老師的蘋果
畢老師的蘋果
 
Te kids circus
Te kids   circusTe kids   circus
Te kids circus
 
Computer Architecture Seminar
Computer Architecture SeminarComputer Architecture Seminar
Computer Architecture Seminar
 
Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...
Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...
Lara Morgan - Its Up To You - Fresh Business Thinking LIVE at Cass Business S...
 
Spectrum deck v5.3
Spectrum deck v5.3Spectrum deck v5.3
Spectrum deck v5.3
 
Outsourcing & Offshoring
Outsourcing & OffshoringOutsourcing & Offshoring
Outsourcing & Offshoring
 
Segunda actividad
Segunda actividadSegunda actividad
Segunda actividad
 
ATTACK Toolkit Webinar on Big Tobacco's Emerging Marketing
ATTACK Toolkit Webinar on Big Tobacco's Emerging MarketingATTACK Toolkit Webinar on Big Tobacco's Emerging Marketing
ATTACK Toolkit Webinar on Big Tobacco's Emerging Marketing
 
CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)
 
Linguagem sql
Linguagem sqlLinguagem sql
Linguagem sql
 
Как стать резидентом КРИТБИ? критби
Как стать резидентом КРИТБИ? критбиКак стать резидентом КРИТБИ? критби
Как стать резидентом КРИТБИ? критби
 
ballorig
ballorigballorig
ballorig
 
Automating the Use of Web APIs through Lightweight Semantics
Automating the Use of Web APIs through Lightweight SemanticsAutomating the Use of Web APIs through Lightweight Semantics
Automating the Use of Web APIs through Lightweight Semantics
 
Web API Classification Survey
Web API Classification Survey Web API Classification Survey
Web API Classification Survey
 
Fresh Business Thinking Social Media Event - Julie Hall
Fresh Business Thinking Social Media Event - Julie Hall Fresh Business Thinking Social Media Event - Julie Hall
Fresh Business Thinking Social Media Event - Julie Hall
 
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference BostonSales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
 

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

『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったかHiroshi Tokumaru
 
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)Yuya Takeyama
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるTakuya Sato
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxHideo Kashioka
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012Hiroshi Tokumaru
 
Php development efficiency improvement
Php development efficiency improvementPhp development efficiency improvement
Php development efficiency improvement伸幸 茂木
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summaryYukio NAGAO
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5Web applicationpenetrationtest その5
Web applicationpenetrationtest その5Tetsuya Hasegawa
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門Michinari Odajima
 
PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料Yasuo Ohgaki
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf耕二 阿部
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめkinunori
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 

Similaire à 『PHP逆引きレシピ』とセキュリティのこと (20)

『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
2009 PHP初心者
2009 PHP初心者2009 PHP初心者
2009 PHP初心者
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
Php development efficiency improvement
Php development efficiency improvementPhp development efficiency improvement
Php development efficiency improvement
 
Kobe sec#7 summary
Kobe sec#7 summaryKobe sec#7 summary
Kobe sec#7 summary
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5Web applicationpenetrationtest その5
Web applicationpenetrationtest その5
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門
 
PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料PHPカンファレンス2014セキュリティ対談資料
PHPカンファレンス2014セキュリティ対談資料
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 

Plus de kenjis

AspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワークAspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワークkenjis
 
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイントkenjis
 
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoyakenjis
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
はじめてのMercurial/Bitbucket その2
 はじめてのMercurial/Bitbucket その2 はじめてのMercurial/Bitbucket その2
はじめてのMercurial/Bitbucket その2kenjis
 
フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成kenjis
 
達人出版会からPHPの本を出版しよう
達人出版会からPHPの本を出版しよう達人出版会からPHPの本を出版しよう
達人出版会からPHPの本を出版しようkenjis
 
FuelPHPでのファイルアップロード
FuelPHPでのファイルアップロード FuelPHPでのファイルアップロード
FuelPHPでのファイルアップロード kenjis
 
CodeIgniterユーザガイドの翻訳に参加しよう!
CodeIgniterユーザガイドの翻訳に参加しよう!CodeIgniterユーザガイドの翻訳に参加しよう!
CodeIgniterユーザガイドの翻訳に参加しよう!kenjis
 
はじめてのMercurial/Bitbucket
はじめてのMercurial/BitbucketはじめてのMercurial/Bitbucket
はじめてのMercurial/Bitbucketkenjis
 
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010kenjis
 
CodeIgniter 貴方はどのフレームワークを使うべきか?
CodeIgniter 貴方はどのフレームワークを使うべきか?CodeIgniter 貴方はどのフレームワークを使うべきか?
CodeIgniter 貴方はどのフレームワークを使うべきか?kenjis
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークkenjis
 

Plus de kenjis (16)

AspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワークAspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワーク
 
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
 
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
はじめてのMercurial/Bitbucket その2
 はじめてのMercurial/Bitbucket その2 はじめてのMercurial/Bitbucket その2
はじめてのMercurial/Bitbucket その2
 
フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成
 
達人出版会からPHPの本を出版しよう
達人出版会からPHPの本を出版しよう達人出版会からPHPの本を出版しよう
達人出版会からPHPの本を出版しよう
 
FuelPHPでのファイルアップロード
FuelPHPでのファイルアップロード FuelPHPでのファイルアップロード
FuelPHPでのファイルアップロード
 
CodeIgniterユーザガイドの翻訳に参加しよう!
CodeIgniterユーザガイドの翻訳に参加しよう!CodeIgniterユーザガイドの翻訳に参加しよう!
CodeIgniterユーザガイドの翻訳に参加しよう!
 
はじめてのMercurial/Bitbucket
はじめてのMercurial/BitbucketはじめてのMercurial/Bitbucket
はじめてのMercurial/Bitbucket
 
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010
 
CodeIgniter 貴方はどのフレームワークを使うべきか?
CodeIgniter 貴方はどのフレームワークを使うべきか?CodeIgniter 貴方はどのフレームワークを使うべきか?
CodeIgniter 貴方はどのフレームワークを使うべきか?
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
 

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

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