情報セキュリティ講座(103) SQLインジェクション攻撃
SQLインジェクション攻撃は、WEBサービスの入力画面で、不正なSQL文を投入することで、データベースを操作する攻撃です。
WEBサービスに限らず、システムはアプリケーションとデータベースで構成されます。データベースは、SQL文という共通の文法により、閲覧・更新・追加・削除ができます。SQLインジェクション攻撃は、この点を突いて、データベースのデータを改ざんするなどの攻撃をするものです。ログイン画面で、巧妙にしかけられたSQL文を投入して、パスワードを書き換えたり、というような形です。
SQLインジェクション攻撃の対策としては、次のものがあります。
1. プレースホルダ
SQL文に変数を与える際に、プレースホルダを用います。アプリケーションからデータベースにSQL文を投入する際に、変数が「?」などのプレースホルダで引き渡されれば、予期しないSQL文が構成されることはありません。
2. エスケープ処理
SQL文を構成する変数に対してエスケープ処理を行えば、文字列として与えられた悪意ある文字列が、無害化されます。
‘を””に、\\を\\\\に変換するなどです。
3. エラーメッセージ
データベースのエラーメッセージをそのままブラウザに表示すると、どのような文字列を投入すれば、データベースからどのような反応が返ってくるのか、わかってしまいます。システムエラーメッセージは、ユーザ画面には表示しないよう注意します。