Submit Search
Upload
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
•
Download as ODP, PDF
•
4 likes
•
1,449 views
Yuya Takeyama
Follow
Web アプリケーションにおけるセキュリティの基本、また PHP 特有の問題等について。
Read less
Read more
Report
Share
Report
Share
1 of 70
Download now
Recommended
Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門
Muneaki Nishimura
『PHP逆引きレシピ』とセキュリティのこと
『PHP逆引きレシピ』とセキュリティのこと
kenjis
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
PHPの今とこれから2016
PHPの今とこれから2016
Rui Hirokawa
PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話
Rui Hirokawa
Ruby build
Ruby build
Yuichiro Naito
RFC: "var" Deprecation
RFC: "var" Deprecation
y-uti
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Recommended
Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門
Muneaki Nishimura
『PHP逆引きレシピ』とセキュリティのこと
『PHP逆引きレシピ』とセキュリティのこと
kenjis
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
PHPの今とこれから2016
PHPの今とこれから2016
Rui Hirokawa
PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話
Rui Hirokawa
Ruby build
Ruby build
Yuichiro Naito
RFC: "var" Deprecation
RFC: "var" Deprecation
y-uti
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Metasploit framework
Metasploit framework
zatslide
Symfony開発者がLaravelしようとして云々
Symfony開発者がLaravelしようとして云々
mimizuk
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
Kiyoshi Sawada
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
PHPべんちまーく
PHPべんちまーく
chichi1091
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
Takuya Sato
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
Hiroshi Tokumaru
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5
Tetsuya Hasegawa
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
Kobe sec#7 summary
Kobe sec#7 summary
Yukio NAGAO
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
Appresso x LUXIAR
Appresso x LUXIAR
lalha
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
Hideo Kashioka
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
徳丸本ができるまで
徳丸本ができるまで
Hiroshi Tokumaru
More Related Content
What's hot
Metasploit framework
Metasploit framework
zatslide
Symfony開発者がLaravelしようとして云々
Symfony開発者がLaravelしようとして云々
mimizuk
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
Kiyoshi Sawada
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
PHPべんちまーく
PHPべんちまーく
chichi1091
What's hot
(6)
Metasploit framework
Metasploit framework
Symfony開発者がLaravelしようとして云々
Symfony開発者がLaravelしようとして云々
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
PHPべんちまーく
PHPべんちまーく
Similar to 第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
Takuya Sato
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
Hiroshi Tokumaru
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5
Tetsuya Hasegawa
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
Kobe sec#7 summary
Kobe sec#7 summary
Yukio NAGAO
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
Appresso x LUXIAR
Appresso x LUXIAR
lalha
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
Hideo Kashioka
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
徳丸本ができるまで
徳丸本ができるまで
Hiroshi Tokumaru
Using Windows Azure
Using Windows Azure
Shinji Tanaka
安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー
hakoika-itwg
PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
Similar to 第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
(20)
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Web applicationpenetrationtest その5
Web applicationpenetrationtest その5
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
Kobe sec#7 summary
Kobe sec#7 summary
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
Appresso x LUXIAR
Appresso x LUXIAR
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
徳丸本ができるまで
徳丸本ができるまで
Using Windows Azure
Using Windows Azure
安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー
PHP基礎勉強会
PHP基礎勉強会
More from Yuya Takeyama
5分でわかる? 関数型 PHP の潮流
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
Reactor Pattern and React
Reactor Pattern and React
Yuya Takeyama
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
Yuya Takeyama
PHP と MySQL でカジュアルに MapReduce する (Short Version)
PHP と MySQL でカジュアルに MapReduce する (Short Version)
Yuya Takeyama
PHP と MySQL でカジュアルに MapReduce する
PHP と MySQL でカジュアルに MapReduce する
Yuya Takeyama
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
MySQL 入門的なはなし
MySQL 入門的なはなし
Yuya Takeyama
HashTable と HashDos
HashTable と HashDos
Yuya Takeyama
Proposal for xSpep BDD Framework for PHP
Proposal for xSpep BDD Framework for PHP
Yuya Takeyama
Building Development Environment with php-build and phpenv
Building Development Environment with php-build and phpenv
Yuya Takeyama
PHPUnit でよりよくテストを書くために
PHPUnit でよりよくテストを書くために
Yuya Takeyama
Making DSL with []
Making DSL with []
Yuya Takeyama
LIMIT 付きで UPDATE を行うと何故怒られるか
LIMIT 付きで UPDATE を行うと何故怒られるか
Yuya Takeyama
GOOS #1
GOOS #1
Yuya Takeyama
Ruby 同好会宣言
Ruby 同好会宣言
Yuya Takeyama
More from Yuya Takeyama
(16)
5分でわかる? 関数型 PHP の潮流
5分でわかる? 関数型 PHP の潮流
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Reactor Pattern and React
Reactor Pattern and React
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
PHP と MySQL でカジュアルに MapReduce する (Short Version)
PHP と MySQL でカジュアルに MapReduce する (Short Version)
PHP と MySQL でカジュアルに MapReduce する
PHP と MySQL でカジュアルに MapReduce する
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
MySQL 入門的なはなし
MySQL 入門的なはなし
HashTable と HashDos
HashTable と HashDos
Proposal for xSpep BDD Framework for PHP
Proposal for xSpep BDD Framework for PHP
Building Development Environment with php-build and phpenv
Building Development Environment with php-build and phpenv
PHPUnit でよりよくテストを書くために
PHPUnit でよりよくテストを書くために
Making DSL with []
Making DSL with []
LIMIT 付きで UPDATE を行うと何故怒られるか
LIMIT 付きで UPDATE を行うと何故怒られるか
GOOS #1
GOOS #1
Ruby 同好会宣言
Ruby 同好会宣言
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
1.
第一回 社内勉強会 Security
Checklist に学ぶ PHP セキュリティ Yuya Takeyama 2010/05/21 (Fri)
2.
3.
PHP におけるセキュリティの難所を知る PHP
に特化した、より実践的な話。 教材として PHP Application Security Checklist を使用。
4.
自社サービスにおける問題点の共有
5.
このあと、そのための時間をとる予定。
6.
この機会にぶっちゃけましょう。
7.
8.
・ SQL インジェクション
9.
PHP のセキュリティ
10.
・本当はおそろしい php.ini ・
5c 問題の無間地獄
11.
Cross Site Scripting
Cross Site Scripting Cross Site Scripting Cross Site Scripting
12.
略して
13.
CSS
14.
・・・だと Cascading Style
Sheet と混同するので
15.
XSS 一般的には と呼ばれています
(DVD のプロテクト技術にも CSS ってのがありましたが・・・ )
16.
簡単に 言うと
17.
サイトを越えて 悪意のあるコードを 実行すること
18.
Input from $_GET,
$_POST, $_COOKIE and $_REQUEST is considered tainted.
19.
直訳
20.
$_GET 、 $_POST
、 $_COOKIE 、そして $_REQUEST からの入力は 汚染 を考慮されているか。
21.
Understood that only
some values in $_SERVER and $_ENV are untainted.
22.
直訳
23.
汚染 されていないのは
$_SERVER と $_ENV のいくつかの値だけであることを理解しているか。
24.
つまり
25.
入力の 汚染 を
常に 疑うこと
26.
出力は 常に エスケープ
すること
27.
SQL Injection
28.
例
29.
MySQL による ユーザー認証
30.
SELECT * FROM
users WHERE user = ' yuya ' AND pass = ' doom ' 色 がついているのは、ユーザーのフォームへの入力による値
31.
パスワードが一致しないと レコードが引けない (=
ログインできない ) はずだけど・・・
32.
SELECT * FROM
users WHERE user = ' yuya' OR 1 # ' AND pass = ' doom '
33.
もっと酷い ケース
34.
SELECT * FROM
users WHERE user = ' ';TRUNCATE users # ' AND pass = ' doom '
35.
ただし
36.
PHP の mysql_query
関数は ;( セミコロン ) 区切りによる 複数のクエリ の同時送信は できない 。
37.
さておき
38.
どうしたら SQL インジェクションから
自由になれるか
39.
入力の 汚染 を
常に 疑うこと
40.
出力は 常に エスケープ
すること
41.
SELECT * FROM
users WHERE user = ' yuya ' OR 1 # ' AND pass = ' doom ' SQL 文のエスケープをしてあげる ※ SQL 文は PHP アプリケーションから 見れば出力ですね
42.
43.
出力を常にエスケープする
44.
これを守るだけで、その他の脅威
45.
・ディレクトリトラバーサル
46.
・クロスサイトリクエストフォージェリ (CSRF)
47.
・コマンドラインジェクション等
48.
も防ぐことができます。
49.
本当は おそろしい php.ini
50.
ここで再び PHP Application
Security Checklist
51.
register_globals is disabled.
52.
直訳
53.
register_globals は 無効化されているか
54.
http://example.net/?debug=on にアクセスすると ”
on” という値を持った 変数 $debug が 勝手に できてしまう
55.
現在は デフォルトで Off
になっているので とりあえず 安心
56.
php.ini には こういう
地雷 がいっぱい しかも On だったりするから困る
57.
addslashes() は マルチバイトを
扱えないから 使用禁止!
58.
magic_quotes_gpc も On
にするの禁止!
59.
addslashes() is not
used.
60.
Magic quotes is
disabled.
61.
PHP Application Security
Checklist さんも そう言ってるので!
62.
63.
そもそも addslashes() がイケてない
( 日本になんて生まれるんじゃなかった )
64.
マルチバイト文字を抜きにしても、 addslashes() ではエスケープできない
DB もある。 (SQLite とか )
65.
PHP6 では削除予定
66.
5c 問題の 無間地獄
67.
addslashes() じゃない SQL
のエスケープについて 考えてみる
68.
mysql_real_escape_string()
69.
これで 安心?
70.
否
71.
mysql_client_encoding() すると latin1
とか・・・
72.
SET NAMES すればいいのでは?
73.
否
74.
SET NAMES しても
mysql_client_encoding() は変わりません。
75.
mysql_set_charset() しましょう とりあえずこれで
うまくいく模様 ( 要検証 )
76.
ただし
77.
mysql_set_charset() は PHP
5.23 以降のみ あとは my.cnf とか 触らないといけなくなる・・・
78.
プリペアド ステートンメント
79.
$sql = "INSERT
INTO artists (id, name) VALUES ( ? , ? )"; $stmt = $db->prepare($sql); $data = array( 1 , ' 野坂昭如 '); $db->execute($stmt, $data); ↑ こーいうの
80.
これで 安心?
81.
否
82.
PHP スクリプトで エミュレート
しているだけだと、 結局同じことが 起りうる
83.
とりあえず Pear は
ダメっぽい
84.
DBMS 側が 提供している
API を利用する ライブラリなら 安心?
85.
86.
SET NAMES も禁止。
mysql_set_charset() しましょう
87.
プリペアドステートメントは、実装次第 有名ライブラリでも疑り深くテスト
88.
mbstring.internal_encoding は UTF-8
にするのが無難
89.
参考文献 『 PHP
Application Security Checklist 』 http://www.sk89q.com/content/2010/04/phpsec_cheatsheet.pdf Chris Shiflett 『入門 PHP セキュリティ』
Download now