カテゴリー:
セキュリティ
閲覧数:940 配信日:2014-05-26 22:19
対策
SQLインジェクションの最も確実で根本的な対策
・可能な限りプリペアドステートメントを利用
プリペアドステートメントとは?
・prepared statement
狭義
・先にSQLを確定しコンパイルしてしまうこと
広義
・「値と置き換えるためのプレースホルダを含んだSQL」を事前に準備して、SQL実行時値をプレースホルダに割り当てる機能
プリペアドステートメント使用メリット
・後から変数部分に値だけを配列に束ねて実行する(バインド機構)ため、危険な文字列の挿入等によって(原理的に)SQL文の破壊が発生しない
・より安全
・SQL文を発行する際にプログラム側でエスケープを行う必要がなくなるため、エスケープ漏れによるSQLインジェクションの可能性を減らすことが可能
引用符
・プリペアドステートメントに渡すパラメータを、引用符で括る必要はない(ドライバが自動的に実施)
プレースホルダ
プレースホルダとは?
・SQLの中に予め変数が入る場所(プレース)を確保(ホールド)しておくこと
・パラメータ部分を示す記号「?」のこと
・「バインド変数」と呼ぶこともある
バインドする
・パラメータ部分を示す記号「?」へ実際の値を割り当てること
プレースホルダの種類
1.静的プレースホルダ
2.動的プレースホルダ
1.静的プレースホルダ
パラメータのバインド処理をデータベースエンジン側で実行する方式
・正統
2.動的プレースホルダ
・パラメータのバインド処理を、アプリケーション側のライブラリ内で実行する方式
・文字列を動的に組み立てるから脆弱性が入り込む