第12章 セキュリティ
教科書「プログラミングPHP 第2版」
上級試験は、オライリーから出版されているプログラミングPHP 第2版を教科書に出題されます。
入力をフィルタする
- PHP自体が安全/危険ではなく、書いたコードが安全か危険か
- アプリケーションが生成した情報以外は全て汚染されている可能性がある
- ホワイトリスト: 妥当性を確認できないデータは無効にする
- 無効なデータを修正しない: 無効なデータを修正するプロセスに脆弱性が生じることも
- 命名規則: フィルタしたかどうかを明確にする。$clean['color']
- ctype_alnum等を使ってチェックする。チェックしきれない時は正規表現で
SQL インジェクション
- エスケープされていないデータを SQL クエリに使用すると起きる
- 危険な例: $_POST['username'] をそのままクエリに使う
- mysql_real_escape_string を使用する。% 等特殊文字への対応が必要
- 束縛パラメータを使用するのが最適
出力のエスケープ
- O'Reilly は、MYSQL へ送るときは O\'Reilly に変換する
- HTML 出力するときは、htmlentites(データ、ENT_QUOTES, 'UTF-8')
- URLとして出力するデータに変数を含める場合、urlencode と htmlentites 処理を行う
- PEAR::DB のようなデータベース抽象化ライブラリを用いる
ファイル名
- ファイル名に想定外のデータが挿入される可能性がある(../ 等)
- fopen は、リモートファイルを開くことができる(php.ini の設定次第だが)
- realpath は、「.」「..」「/」等を検証し、正規化したパスを返す
- basename は、パスから、ファイル名部分のみを抽出する
クロスサイトスクリプティング
- エスケープしないで出力すると脆弱性が生じる
- 歴史的には document.cookie 情報を不正取得することが多かった
- htmlentities でエスケープしてから出力する
※原書を元にしています。日本語訳本とは用語等が異なる可能性があります。
Copyright (C) 2003-2018. PHP で WEB 作成 All rights reserved.