SQLインジェクション対策には静的プレースホルダ


データベースへアクセスするSQLに不備があると発生する脆弱性として、SQLインジェクションが知られている。

WebアプリケーションにSQLインジェクションが潜んでいると、次のような状況が起こりえる。

1:データベースに不正アクセスされる

2:データーベースの内容が改ざんされる

3:IDとパスワードを用いずに不正ログインされる

4:データベースサーバーで不正にプログラムを実行される

SQLインジェクションが生まれる原因は、リテラルからはみ出した文字列をシステムがSQL文として認識した結果、元のSQL文が改変されることにある。

SQLインジェクションを回避するには、「静的プレースホルダによりSQL文を組み立てる」のが良いとされている。たとえば、次のSQL文の「?」がプレースホルダーになる。

SELECT * FROM drink WHERE author = ? ORDER BY id

静的プレースホルダーは、値のバインドをデータベースエンジン側で行う。プレースホルダーのついたSQL文は、そのままデータベースエンジンに送られコンパイルされSQL文が確定する。その後、バインド値がデータベースエンジンに送られ、エンジン側で値を当てはめた後にSQL文が実行される。このように、プレースホルダーの状態でSQL文がコンパイルされるため、原理的に後からSQL文を変更できない。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です