php+db

19
第 4 第 PHP+DB AlphabetBootCamp

Upload: sawada-makoto

Post on 15-Apr-2017

196 views

Category:

Software


2 download

TRANSCRIPT

Page 1: PHP+DB

第 4 回 PHP+DBAlphabetBootCamp

Page 2: PHP+DB

アジェンダ

環境

今回の範囲

PDO とは

PDO の使い方

セキュリティ

実際に試してみよう

Page 3: PHP+DB

今回の範囲

PHP で DB(MySQL) につなぐ方法を学び、

実際に DB に対してデータの追加・取得を行うところまで

Page 4: PHP+DB

環境 (Environment)

実行環境

OS: Windows10 PHP: PHP7.0.13※ 他の OS, バージョンでも問題ないです

Page 5: PHP+DB

PDO(PHP Data Objects) とは

標準で用意されている DB に接続するための仕組み

特徴 PHP における DB にアクセスする方法の主流

どの DB 製品を使っても同じ使い方が可能

⇒ とりあえず PDO を使う!

Page 6: PHP+DB

PDO の使い方

PDO 使うために必要なパラメータは3つ

1. DSN :データベースに接続するための接続情報2. DB のユーザ名:デフォルトは root3. DB のパスワード:デフォルトは未設定

⇒ おまじない的に設定で OK !

※ 他にもオプションを渡せますが、割愛…

Page 7: PHP+DB

DSN の設定

MySQL の DNS

書式

mysql:dbname= データベース名 ;host= ホスト ;port= ポート

データベース名 : 作成したデータベース名

ホスト : ローカルの場合は、 localhost( もしくは 127.0.0.1)ポート : 初期値は「 3306 」(ただし、省略可能)

example.mysql:dbname=abc;host=localhost;port=3306

Page 8: PHP+DB

PDO オブジェクトの生成

<?php// DNS$dns = 'mysql:dbname=abc;host=localhost;port=3306;charset=utf8’;// DB のユーザ名

$dbUser = 'root’;// DB のパスワード

$dbPassword = '’;// PDO オブジェクトの生成$pdo = new PDO($dns, $dbUser, $dbPassword);

Page 9: PHP+DB

SQL を発行してみよう

これで DB との接続は OK !

あとは SQL を発行して、データの追加や取得を行う

Page 10: PHP+DB

SQL を発行してみよう - SELECT

<?php// ユーザ情報を全て取得する SQL$sql = 'SELECT * FROM users’;$stmt = $pdo->query($sql);foreach ($stmt as $row) { echo $row['name’] . '<br>’;}

データの取得は query メソッド

Page 11: PHP+DB

SQL を発行してみよう – INSERT/UPDATE/DELETE

<?php// ユーザーを追加

$sql = “INSERT INTO users (name) VALUES(' 澤田 諒 ')";$stmt = $pdo->prepare($sql);$stmt->execute();

データの追加・更新・削除は execute メソッド

Page 12: PHP+DB

セキュリティ

忘れてはいけないのがセキュリティ

Web は全世界に対して公開される!

セキュリティが甘いと、個人情報が漏れたり…

ユーザにとっても、販売会社にとっても、開発会社にとっても大変なことに!!!

Page 13: PHP+DB

セキュリティを怠るとどうなるか。

あるインテリアショップの事例で、SQL インジェクション対策が十分でないという理由から開発会社が提訴された。

⇒ 開発会社が約 3,232 万円を支払うという判決

必ず、 SQL インジェクション対策をしよう!

SQL インジェクション対策もれの責任を開発会社に問う判決 - 徳丸浩の日記http://blog.tokumaru.org/2015/01/sql.html

Page 14: PHP+DB

SQL インジェクションとは?

SQL インジェクション(英 : SQL Injection )とは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しない SQL 文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。また、その攻撃を可能とする脆弱性のことである。 [1]

SQL インジェクション – Wikipediahttps://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

Page 15: PHP+DB

SQL インジェクションの例

SQL にユーザからの入力を直接 SQL に埋め込むと、意図しない SQL が実行される可能性がある

たとえば

SELECT * FROM users WHERE name = ‘( 入力値 )’ という SQL だと、入力値に’ t’ or ‘t’ = ‘t’ を入力されると

SELECT * FROM users WHERE name = ‘t’ OR ‘t’ = ‘t’;という SQL が発行され、他のユーザ情報が表示されてしまうことになる

Page 16: PHP+DB

SQL インジェクション対策

バインド機構を利用して、ユーザの入力値を埋め込む

Example$sql = ‘SELECT * FROM users WHERE name = :name’;$stmt = $pdo->prepare($sql);// 値の設定

$stmt->bindValue(‘:name’, $name, PDO::PARAM_STR);$stmt->execute();

:nameに$nameを埋め込む

Page 17: PHP+DB

実際に PHP から DB に繋いでみよう!

第3回勉強会では CSV に内容を保存する掲示板を作りました

今回は、 CSV から DB に置き換えてみましょう!

Page 18: PHP+DB

おすすめ本 (?)

「詳細 ! PHP7 + MySQL 」

価格 : 3,218 円 (Kindle 版 : 966 円 )※ Amazon の販売価格

おすすめポイント

PHP7 対応!

Page 19: PHP+DB

おすすめ本

「体系的に学ぶ 安全な Web アプリケーションの作り方 脆弱性が生まれる原理と対策の実践」

価格 : 3,456 円 (Kindle 版 : 3024 円 )※ Amazon の販売価格

おすすめポイント

脆弱性を実際のコードで試しながら、攻撃の仕方・対策が学べる!