SQLインジェクションは、データベースシステムをSQLという言語を用いて不正に操作する、Webアプリケーションの脆弱性に対する攻撃を意味します。
具体的には、想定されていないSQL文を合成し、不正にデータベースの内容を改ざんすることで、本来管理者しかアクセスできない情報を表示させます。
引用元:https://www.ipa.go.jp/files/000017316.pdf
データベースに蓄積された非公開情報の閲覧
・情報漏えい等
データベースに蓄積された情報の改ざん及び削除
・Webペーシの改ざん
・パスワード変更
・システム停止等
認証回避による不正ログイン
・ログインした正規の利用者に許可されている操作が第三者によって不正に行われる
ストアドプロシージャ等用いたOSコマンドの実行
・システムを乗っ取り
・踏み台攻撃としての悪用
Webサイトの性質を問わず、データベースを用いて運用されているWebアプリケーションを設置しているWebサイトや、データベースに重要情報を格納しているWebサイト。
プレースホルダでSQL文の組み立てを実装
文字列連結を用いてSQL 文を組み立てる際、文中で可変となる値をリテラル(定数)の 形で埋め込み、値を文字列型として埋め込む場合は、値をシングルクォートで囲んで記述します が、その際「'」→「''」、「\」→「\\」等、文字列リテラル内で特別な意味を持つ記号文字をエスケープ処理します。
エラーメッセージをそのままブラウザへ表示しない
エラーメッセージの内容にデータベースの種類やエラーの原因及び実行エラーを起こした SQL 文等 の情報が含まれる場合、これらは SQL インジェクション攻撃の手がかりとなります。
また、実際に攻撃された結果を表示する情報源と して悪用される場合があります。
データベースアカウントに適切な権限を与える
Webアプリケーションがデータベースに接続する際、使用するアカウントの権限が高い際攻撃による被害が深刻化する恐れがあります。
Webアプリケーションからデータベースに渡すコマンドを洗い出し、その実行に必要な最小限の権限をデータベースアカウントに与えることで保険的対策となります。