Recommended
PDF
PPTX
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
PDF
PPTX
PDF
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDOでデータベース接続と SQLインジェクション対策
PDF
PDF
PDF
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
PPTX
PDF
PPTX
PPTX
CakePHP+Smartyハイブリッドによるラクラク開発
PDF
PPT
PDF
PDF
PDF
PPTX
PDF
PPTX
PDF
PDF
More Related Content
PDF
PPTX
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
PDF
PPTX
PDF
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PDF
PDF
What's hot
PDF
PDF
PDF
PDF
PDF
PDOでデータベース接続と SQLインジェクション対策
PDF
PDF
PDF
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
PPTX
PDF
PPTX
PPTX
CakePHP+Smartyハイブリッドによるラクラク開発
PDF
PPT
PDF
PDF
PDF
PPTX
PDF
Viewers also liked
PPTX
PDF
PDF
PDF
PDF
PDF
JAWSUG architecture-crowler
PDF
PPTX
PPTX
サーバーを作ろう (毎週のハンズオン勉強会の資料)
PDF
PDF
PDF
Innovation eggcloudnative
PDF
Rubyで作るクローラー Ruby crawler
PDF
Procedural modeling using autoencoder networks
Similar to ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料)
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
PDF
PDF
PHPの今とこれから2024 at PHP Conference Japan 2024
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PDF
PDF
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
PDF
PPTX
PDF
KEY
PPT
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
PDF
PDF
Web programming introduction
KEY
PDF
PDF
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PDF
PPTX
ウェブアプリのセキュリティをちゃんと知ろう (毎週のハンズオン勉強会の資料) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. GET パラメータのバリデーション# PHP に入ってくる可能性があるのは可変長のバイト列$url = $_GET['url'];if (!mb_check_encoding($url, 'UTF-8')) throw new Exception('文字列ではない');# この時点で $urlは UTF-8 でエンコーディングされた文字列ということが保証される$url_length = mb_strlen($url, 'UTF-8');if ($url_length > 512) throw new Exception('文字列が長すぎる');# この時点で $urlは UTF-8 でエンコーディングされた 512 文字以下の文字列ということが保証されるif (!preg_match('/\As?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,%#]+\z/u', $url)) throw new Exception('URL として不正');# この時点で $urlは Http URL であることが保証される$url_info = parse_url($url);if ($url_info['host'] !== 'ohma-inc.com') throw Exception('外部サイトの URL');# この時点で $urlは ohma-inc.com の Http URL であることが保証される 12. アップロードファイルのバリデーションif (!$_FILES['file']) throw new Exception('ファイルがアップロードされなかった');$file = $_FILE['file'];# この時点でmulipart/form-data によって file というパラメタ名で# ファイルが送信されたことが保証されるif (!is_uploaded_file($file['tmp_name']) or $file['error'] !== 0) throw new Exception('アップロードエラー');$filename = $file['tmp_name'];# この時点で $filename は HTTP_POST によって送信されたファイルを# 一時保存しているファイルのパスであり、 php.ini に設定された# アップロードファイルのファイルサイズ以内であることが保証される$info = getimagesize($filename);if (!$info or !isset($info['mime']) or $info['mime'] === 'image/gif') throw new Exception('アップロードされたファイルが GIF じゃない');# この時点で $filename は HTTP_POST によって送信されたファイルを# 一時保存しているファイルのパスであり、 php.ini に設定された# アップロードファイルのファイルサイズ以内であり# GIF のマジックバイトを持つことが保証される 13. 14. phpapache の設定HTML に正しくコンテンツを認識させるheader('Content-Type: text/html; charset=utf-8');header('X-Content-Type-Options: nosniff');header('Content-Type: application/json; charset=utf-8');header('X-Content-Type-Options: nosniff');AddDefaultCharset utf-8Header set X-Content-Type-Options nosniff 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ダメな例 (正しくない SQL が生成される可能性がある)正しい例 ( "?" がプレースホルダ)正しい SQL を生成する$db->execute('SELECT name FROM member WHERE member_id = "' . $member_id . '"');$stmt= $db->prepare('SELECT name FROM member WHERE member_id = ?');$stmt->bind_param($member_id);$stmt->execute(); 27. 28. 29. 30. 31.