PHPからのdbアクセスのメモ。検索用。解説ではないので、不親切です。
まずはセキュリティの観点で覚えておくこと。
入力をそのまま利用し、SQL文を作らない。チェックするか、クラスやフレームワークに用意されている関数を利用する。ブラウザサイドでjavascriptを利用しチェックする場合であっても、サーバーサイドで再チェックする。プレースホルダーを利用する場合、SQLがプリコンパイルされた物がDBエンジン側に置かれ、バインドされるプリペアードステートメントは構文が既に解析済みになっているため入力をそのまま利用しても安全である。同じくプレースホルダーを利用するが、アプリケーションのライブラリー側で結合する物は、実装方法によってはSQLインジェクションが起きる可能性があるため、注意する。動的か静的かはDBの種類による。
Pear::MDB2、PDO (PHP Data Objects) などで用意されているquoteを利用すると、適切にエスケープされ、シングルコーティションでクオートされた形に変換できる。
時代的にもセキュリティの面からもDBをSJISやJIS、EUCで使用しない。UTF8メインで。PHPの内部エンコーディングも、DBもUTF8使用に設定し、携帯などの通信やメールに限り、必要に応じて変換する。
エラーメッセージを出さない。みっともないが、メッセージに含まれる情報が攻撃者にヒントを与える。運用時ならば、display_errors=Off、display_startup_errors=Off、error_reporting=E_ALL、log_errors=on、log_errors_max_len=1024、error_log=[filename | syslog]でPHPのエラー出力を制御。
DBが出すメッセージも設定で制御しておく。
データーベースの利用アカウント権限を絞り込む。ワークフレームやCMS使っている場合は難しいかも。
| cakephpメモ< 前 | 次 >phpメモ |
|---|
| < 前 | 次 > |
|---|