SlideShare una empresa de Scribd logo
1 de 14
CakePHP での安全なサイトの作り方1 ~ SQL インジェクション~ 第 10 回 高蔵寺 SE 勉強会  2008/7/6 (日)
SQL インジェクションとは
「インジェクション」は「注入」という意味。 つまり SQL インジェクションは, Web サーバーの背後で動くデータベースに SQL コマンドを送り込み,そのコマンドを実行させる攻撃方法を意味している。  IT Pro より
SQL インジェクションの脆弱性があると どうなるのか?
・情報の漏えい ・データの改ざん ・不正ログイン ・システムの乗っ取り
CakePHP ではどのように対応するか?
例1 $data = $this->Sample->findAll('id=' . $value); コントローラーにこんな感じで書くと、 $value (入力値)に「 1 or 1=1 」というデータが渡されると、 SQL の条件が「 WHERE id=1 or 1=1  」となり、 全てのデータが取得できてしまいます。
例2 ( CakePHP1.1 の場合) $conds = array('id' => '= ' . $value); $data = $this->Sample->findAll($conds); コントローラーにこんな感じで書くと、 $value (入力値)に「 1 or 1=1 」というデータが渡されると、 SQL 文は「 WHERE `id` = '1 or 1=1'  」という感じになり、 例1の様な全件取得はなくなります。 ※ 「  '= ' 」の用にイコールの後のスペースが必要
例3( CakePHP1.2 RC2 の場合) $conds = array('id' => $value); $data = $this->Sample->findAll($conds); コントローラーにこんな感じで書くと、 $value (入力値)に「 1 or 1=1 」というデータが渡されると、 SQL 文は「 WHERE `id` = '1 or 1=1'  」という感じになり、 例1の様な全件取得はなくなります。 ※ 例2の様にイコールは必要なし
+ α $conds = array('id' => '> ' . $value); 比較演算子を使う方法 CakePHP1.1 の場合、先ほどの例の通り $conds = array('id >' => $value); CakePHP1.2 RC2 の場合は前に付けます
例4 $data = $this->Sample->findAllById($value); コントローラーにこんな感じで書くと、 $value (入力値)に「 1 or 1=1 」というデータが渡されると、 SQL の条件が「 WHERE `Sample`.`id` = '1 or 1=1'  」となり、 全件取得を回避できます。
+ α function conditionKeysToString (~)  { quote  処理をやってくれている場所は、 cake/libs/model/datasources/dbo_source.php ここで条件の部分の  SQL  を作っているので、 WHERE  句でどうやったら良いか迷った場合はここを見てみると 良いかもしれません。
保険的対策も必要 ・エラーメッセージの表示をしない ・データベースアカウントの権限設定 ・ DB の格納情報を必要最低限にする ・パスワードは暗号化して保存
終わり

Más contenido relacionado

Más de 柴田 篤志

Nagoya.phpについて
Nagoya.phpについてNagoya.phpについて
Nagoya.phpについて柴田 篤志
 
ライフハックでストレスフリーな仕事術
ライフハックでストレスフリーな仕事術ライフハックでストレスフリーな仕事術
ライフハックでストレスフリーな仕事術柴田 篤志
 
ソーシャルメディアを利用したビジネス展開
ソーシャルメディアを利用したビジネス展開ソーシャルメディアを利用したビジネス展開
ソーシャルメディアを利用したビジネス展開柴田 篤志
 
CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」
CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」
CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」柴田 篤志
 
オープンソースカンファレンス2009Nagoya
オープンソースカンファレンス2009Nagoyaオープンソースカンファレンス2009Nagoya
オープンソースカンファレンス2009Nagoya柴田 篤志
 
Cake Phpで簡単問い合わせフォームの作り方
Cake Phpで簡単問い合わせフォームの作り方Cake Phpで簡単問い合わせフォームの作り方
Cake Phpで簡単問い合わせフォームの作り方柴田 篤志
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例柴田 篤志
 
Google Maps Api活用事例~飲食店案内ネット一六社マップ~
Google Maps Api活用事例~飲食店案内ネット一六社マップ~Google Maps Api活用事例~飲食店案内ネット一六社マップ~
Google Maps Api活用事例~飲食店案内ネット一六社マップ~柴田 篤志
 
Cake PhpでやってみようOpen Id入門
Cake PhpでやってみようOpen Id入門Cake PhpでやってみようOpen Id入門
Cake PhpでやってみようOpen Id入門柴田 篤志
 
一六社ブログ-プラグイン作成入門
一六社ブログ-プラグイン作成入門一六社ブログ-プラグイン作成入門
一六社ブログ-プラグイン作成入門柴田 篤志
 
JavaScript&Firebug入門
JavaScript&Firebug入門JavaScript&Firebug入門
JavaScript&Firebug入門柴田 篤志
 
Cake Php ページ送り機能
Cake Php ページ送り機能Cake Php ページ送り機能
Cake Php ページ送り機能柴田 篤志
 
Cake Php パン屋へ行こう
Cake Php パン屋へ行こうCake Php パン屋へ行こう
Cake Php パン屋へ行こう柴田 篤志
 
Cake Php キャッシュのやり方
Cake Php キャッシュのやり方Cake Php キャッシュのやり方
Cake Php キャッシュのやり方柴田 篤志
 
開発ツールの紹介(080316)
開発ツールの紹介(080316)開発ツールの紹介(080316)
開発ツールの紹介(080316)柴田 篤志
 
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)柴田 篤志
 
CakePHPのコンポーネントの使い方(080316)
CakePHPのコンポーネントの使い方(080316)CakePHPのコンポーネントの使い方(080316)
CakePHPのコンポーネントの使い方(080316)柴田 篤志
 
第1回SE勉強会(080302)
第1回SE勉強会(080302)第1回SE勉強会(080302)
第1回SE勉強会(080302)柴田 篤志
 

Más de 柴田 篤志 (19)

Nagoya.phpについて
Nagoya.phpについてNagoya.phpについて
Nagoya.phpについて
 
ライフハックでストレスフリーな仕事術
ライフハックでストレスフリーな仕事術ライフハックでストレスフリーな仕事術
ライフハックでストレスフリーな仕事術
 
ソーシャルメディアを利用したビジネス展開
ソーシャルメディアを利用したビジネス展開ソーシャルメディアを利用したビジネス展開
ソーシャルメディアを利用したビジネス展開
 
CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」
CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」
CakeMatsuri事例紹介「CakePHPでつくる地域SNS ~全国40ヶ所以上で展開する地域SNSのシステム~」
 
オープンソースカンファレンス2009Nagoya
オープンソースカンファレンス2009Nagoyaオープンソースカンファレンス2009Nagoya
オープンソースカンファレンス2009Nagoya
 
Cake Phpで簡単問い合わせフォームの作り方
Cake Phpで簡単問い合わせフォームの作り方Cake Phpで簡単問い合わせフォームの作り方
Cake Phpで簡単問い合わせフォームの作り方
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例
 
Life Hack
Life HackLife Hack
Life Hack
 
Google Maps Api活用事例~飲食店案内ネット一六社マップ~
Google Maps Api活用事例~飲食店案内ネット一六社マップ~Google Maps Api活用事例~飲食店案内ネット一六社マップ~
Google Maps Api活用事例~飲食店案内ネット一六社マップ~
 
Cake PhpでやってみようOpen Id入門
Cake PhpでやってみようOpen Id入門Cake PhpでやってみようOpen Id入門
Cake PhpでやってみようOpen Id入門
 
一六社ブログ-プラグイン作成入門
一六社ブログ-プラグイン作成入門一六社ブログ-プラグイン作成入門
一六社ブログ-プラグイン作成入門
 
JavaScript&Firebug入門
JavaScript&Firebug入門JavaScript&Firebug入門
JavaScript&Firebug入門
 
Cake Php ページ送り機能
Cake Php ページ送り機能Cake Php ページ送り機能
Cake Php ページ送り機能
 
Cake Php パン屋へ行こう
Cake Php パン屋へ行こうCake Php パン屋へ行こう
Cake Php パン屋へ行こう
 
Cake Php キャッシュのやり方
Cake Php キャッシュのやり方Cake Php キャッシュのやり方
Cake Php キャッシュのやり方
 
開発ツールの紹介(080316)
開発ツールの紹介(080316)開発ツールの紹介(080316)
開発ツールの紹介(080316)
 
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
 
CakePHPのコンポーネントの使い方(080316)
CakePHPのコンポーネントの使い方(080316)CakePHPのコンポーネントの使い方(080316)
CakePHPのコンポーネントの使い方(080316)
 
第1回SE勉強会(080302)
第1回SE勉強会(080302)第1回SE勉強会(080302)
第1回SE勉強会(080302)
 

Cake Phpでの安全なサイトの作り方1(Sqlインジェクション)