SlideShare a Scribd company logo
第一回 社内勉強会 Security Checklist に学ぶ PHP  セキュリティ Yuya Takeyama  2010/05/21 (Fri)
本日の目的 Webにおけるセキュリティの基本を再確認 「知ってて当然」とされる事柄はあまりに多い。 共通の語彙を身につければ、コミュニケーションコストも下がる。
PHP におけるセキュリティの難所を知る PHP に特化した、より実践的な話。 教材として PHP Application Security Checklist を使用。
自社サービスにおける問題点の共有
このあと、そのための時間をとる予定。
この機会にぶっちゃけましょう。
アジェンダ Web におけるセキュリティのおさらい ・クロスサイトスクリプティング
・ SQL インジェクション
PHP のセキュリティ
・本当はおそろしい php.ini ・ 5c 問題の無間地獄
Cross Site Scripting Cross Site Scripting Cross Site Scripting Cross Site Scripting
略して
CSS
・・・だと Cascading Style Sheet と混同するので
XSS 一般的には と呼ばれています (DVD のプロテクト技術にも CSS ってのがありましたが・・・ )
簡単に 言うと
サイトを越えて 悪意のあるコードを 実行すること
Input from $_GET, $_POST, $_COOKIE and $_REQUEST is considered tainted.
直訳
$_GET 、 $_POST 、 $_COOKIE 、そして  $_REQUEST  からの入力は 汚染 を考慮されているか。
Understood that only some values in $_SERVER and $_ENV are untainted.
直訳
汚染 されていないのは  $_SERVER  と  $_ENV  のいくつかの値だけであることを理解しているか。
つまり
入力の 汚染 を 常に 疑うこと
出力は 常に エスケープ すること
SQL Injection
例
MySQL による ユーザー認証
SELECT * FROM users WHERE user = ' yuya ' AND pass = ' doom ' 色 がついているのは、ユーザーのフォームへの入力による値
パスワードが一致しないと レコードが引けない (= ログインできない ) はずだけど・・・
SELECT * FROM users WHERE user = ' yuya' OR 1 # ' AND pass = ' doom '
もっと酷い ケース
SELECT * FROM users WHERE user = ' ';TRUNCATE users # ' AND pass = ' doom '
ただし
PHP の mysql_query  関数は ;( セミコロン ) 区切りによる 複数のクエリ の同時送信は できない 。
さておき
どうしたら SQL インジェクションから 自由になれるか
入力の 汚染 を 常に 疑うこと
出力は 常に エスケープ すること
SELECT * FROM users WHERE user = ' yuya \ ' OR 1 # ' AND pass = ' doom ' SQL 文のエスケープをしてあげる ※ SQL 文は PHP アプリケーションから 見れば出力ですね
Web におけるセキュリティのまとめ 入力の汚染を常に疑う
出力を常にエスケープする
これを守るだけで、その他の脅威
 ・ディレクトリトラバーサル
 ・クロスサイトリクエストフォージェリ  (CSRF)
 ・コマンドラインジェクション等
も防ぐことができます。
本当は おそろしい php.ini
ここで再び PHP Application Security Checklist
register_globals is disabled.
直訳
register_globals は 無効化されているか
http://example.net/?debug=on にアクセスすると ” on” という値を持った 変数 $debug が 勝手に できてしまう
現在は デフォルトで Off になっているので とりあえず 安心
php.ini には こういう 地雷 がいっぱい しかも On だったりするから困る
addslashes() は マルチバイトを 扱えないから 使用禁止!
magic_quotes_gpc も On にするの禁止!
addslashes() is not used.
Magic quotes is disabled.
PHP Application Security Checklist さんも そう言ってるので!
magic_quotes_gpc の問題点 エスケープされたもの、されてないものが混在するため、余計煩雑。ありがた迷惑。
そもそも addslashes() がイケてない ( 日本になんて生まれるんじゃなかった )
マルチバイト文字を抜きにしても、 addslashes() ではエスケープできない DB もある。 (SQLite とか )
PHP6 では削除予定
5c 問題の 無間地獄
addslashes() じゃない SQL のエスケープについて 考えてみる
mysql_real_escape_string()
これで 安心?
否

More Related Content

PDF
Webアプリ開発者のためのHTML5セキュリティ入門
Muneaki Nishimura
 
PDF
『PHP逆引きレシピ』とセキュリティのこと
kenjis
 
PPTX
Metasploitでペネトレーションテスト
super_a1ice
 
PDF
PHPの今とこれから2016
Rui Hirokawa
 
PDF
PHP 5.5ネーティブキャッシュの話
Rui Hirokawa
 
ODP
Ruby build
Yuichiro Naito
 
PDF
RFC: "var" Deprecation
y-uti
 
PDF
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
 
Webアプリ開発者のためのHTML5セキュリティ入門
Muneaki Nishimura
 
『PHP逆引きレシピ』とセキュリティのこと
kenjis
 
Metasploitでペネトレーションテスト
super_a1ice
 
PHPの今とこれから2016
Rui Hirokawa
 
PHP 5.5ネーティブキャッシュの話
Rui Hirokawa
 
Ruby build
Yuichiro Naito
 
RFC: "var" Deprecation
y-uti
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
 

What's hot (6)

PPTX
Metasploit framework
zatslide
 
PPTX
Symfony開発者がLaravelしようとして云々
mimizuk
 
PPTX
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
Kiyoshi Sawada
 
PDF
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
PDF
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
 
PPTX
PHPべんちまーく
chichi1091
 
Metasploit framework
zatslide
 
Symfony開発者がLaravelしようとして云々
mimizuk
 
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
Kiyoshi Sawada
 
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
 
PHPべんちまーく
chichi1091
 
Ad

Similar to 第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt) (20)

PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
PDF
PHPでセキュリティを真面目に考える
Takuya Sato
 
PDF
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
Hiroshi Tokumaru
 
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
 
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
 
PDF
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
PPTX
Web applicationpenetrationtest その5
Tetsuya Hasegawa
 
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
 
PDF
Kobe sec#7 summary
Yukio NAGAO
 
PPTX
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
 
PPT
Appresso x LUXIAR
lalha
 
PDF
Phpcon tokyo 20120_bigginer
Hideo Kashioka
 
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
PDF
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
PDF
徳丸本ができるまで
Hiroshi Tokumaru
 
PPT
Using Windows Azure
Shinji Tanaka
 
PPTX
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
 
PPTX
第9回勉強会 Webセキュリティー
hakoika-itwg
 
PPTX
PHP基礎勉強会
Yuji Otani
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
PHPでセキュリティを真面目に考える
Takuya Sato
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
Hiroshi Tokumaru
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
 
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
Web applicationpenetrationtest その5
Tetsuya Hasegawa
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
 
Kobe sec#7 summary
Yukio NAGAO
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
 
Appresso x LUXIAR
lalha
 
Phpcon tokyo 20120_bigginer
Hideo Kashioka
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
徳丸本ができるまで
Hiroshi Tokumaru
 
Using Windows Azure
Shinji Tanaka
 
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
 
第9回勉強会 Webセキュリティー
hakoika-itwg
 
PHP基礎勉強会
Yuji Otani
 
Ad

More from Yuya Takeyama (16)

PDF
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
 
PDF
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
 
PDF
Reactor Pattern and React
Yuya Takeyama
 
PDF
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
Yuya Takeyama
 
PDF
PHP と MySQL でカジュアルに MapReduce する (Short Version)
Yuya Takeyama
 
PDF
PHP と MySQL でカジュアルに MapReduce する
Yuya Takeyama
 
PDF
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
PDF
MySQL 入門的なはなし
Yuya Takeyama
 
PDF
HashTable と HashDos
Yuya Takeyama
 
PDF
Proposal for xSpep BDD Framework for PHP
Yuya Takeyama
 
PDF
Building Development Environment with php-build and phpenv
Yuya Takeyama
 
PDF
PHPUnit でよりよくテストを書くために
Yuya Takeyama
 
PDF
Making DSL with []
Yuya Takeyama
 
PDF
LIMIT 付きで UPDATE を行うと何故怒られるか
Yuya Takeyama
 
PDF
GOOS #1
Yuya Takeyama
 
PDF
Ruby 同好会宣言
Yuya Takeyama
 
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
 
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
 
Reactor Pattern and React
Yuya Takeyama
 
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
Yuya Takeyama
 
PHP と MySQL でカジュアルに MapReduce する (Short Version)
Yuya Takeyama
 
PHP と MySQL でカジュアルに MapReduce する
Yuya Takeyama
 
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
MySQL 入門的なはなし
Yuya Takeyama
 
HashTable と HashDos
Yuya Takeyama
 
Proposal for xSpep BDD Framework for PHP
Yuya Takeyama
 
Building Development Environment with php-build and phpenv
Yuya Takeyama
 
PHPUnit でよりよくテストを書くために
Yuya Takeyama
 
Making DSL with []
Yuya Takeyama
 
LIMIT 付きで UPDATE を行うと何故怒られるか
Yuya Takeyama
 
GOOS #1
Yuya Takeyama
 
Ruby 同好会宣言
Yuya Takeyama
 

第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)