はじめに
今回は、SQLによるセキュリティ攻撃についてアウトプットしていこうと思います!
データベースシステムを不正に操作する攻撃
アプリケーションのSQLの不備を利用して、データベースシステムを不正に操作させることがあります。
このような攻撃のことをSQLインジェクションと言います!
SQLインジェクション
Webページのテキスト入力欄やURLなどにSQL文の断片を埋め込むことで、データベースを改竄したり不正に情報を入手する手法のことです!
入力フォームを送信した値により、アプリケーションが本来想定しないSQL文を実行させ、攻撃を行います!
SQLインジェクションの対策
一般的なSQLインジェクションの対策方法
SQLインジェクションの脆弱性を一般的に解消する方法として、SQL文が実行される際のプログラム処理の流れを利用してSQL文が変更されることが挙げられます!
対策方法としては以下のものがあります!
- 意味のある文字列の変換
- より厳格なSQL文の生成
プレースホルダー
プレースホルダーとは、ユーザーの値が入力されるまでの一時的な仮引数のようなものです!
予め確定したSQLにおいて、可変の値が入力される箇所に配置します!
Ruby on RailsにおけるSQLインジェクションの対策方法
Railsのおいて、ActiveRecordのメソッドを使用する場合はSQLインジェクションが問題になることはほとんどありません!
なので、これまで作成したアプリケーションでは対策ができていると言ってもいいと思います!
しかし、ActiveRecordの発行するSQL文では、アプリケーションの機能として要件を観たせていない場合は、SQL文を直接記述しなければいけません!これを行うときは、find_by_sqlメソッドを使います!SQLインジェクションの脆弱性はここに潜んでいます!
ですので、外部からSQL文を実行されて非常に危険なので、プレースホルダーを使いながら、外部のSQL文の実行を防ぎましょう!
コメント