本記事について
プログラミング初心者がセキュリティ攻撃に関する知識とその対策について学んだので、その備忘録として載せております。
どうかお手柔らかにお願いいたしますm (- -)(_ _)ペコリ
SQLインジェクション
・アプリケーションのSQLの不備を利用してデータベースシステムを不正操作する攻撃手法のこと
・外部からの入力によりアプリケーションが想定しないSQL文を実行することによって、認証を突破したり情報を盗んだりする攻撃手法のこと
・webページのテキスト入力欄やURLなどにSQL文を断片を埋め込むことで、データベースを改ざんしたり不正に情報を入手する手法。
・入力フォームから送信した値(例えばユーザー権限を変更するようなSQL文を仕込んで送信)によりアプリケーションが本来想定しないSQL文を実行させ攻撃を行う。
SQLインジェクションの脆弱性を一般的に解消する方法
・SQLインジェクションを防ぐにはSQL文中で意味を持つ特殊文字のエスケープをしたり、プレースホルダーを用いたりすること
・SQL文が実行される際のプログラム処理の流れを利用してSQL文が変更されること
対策① 意味のある文字列の変換
SQLにおいて意味を持つ特殊文字のエスケープ
SQL文中では「’」が文字列の終端を意味している
フォームから「’」を含む文字列が送信された場合に別の記号で置き換えるような実装をすることで実現できる。
対策② より厳格なSQL文の生成
ユーザーからの値をSQLへ反映する前に、SQL文の構造を確定する仕組みをとることで、より厳格に対策できる。
→SQL文確定後にユーザーからの値を入れて実行するため、ユーザーの入力値によりSQL文が変更されることはない。
プレースホルダー
ユーザーの値が入力されるまでの一時的な仮引数のようなもの。
事前にSQLの実行範囲を確定させているので、ユーザーの入力値により、事後の変更が入ることはない。
予め確定したSQLにおいて可変の値が入力される箇所に配置する。