・SQLインジェクションとは?
SQLインジェクションとは、アプリケーションの脆弱性により本来の意図ではない不当な「SQL」文が作成されてしまい、「注入(injection)」されることによって、データベースのデータを不正に操作される攻撃のこと。
・SQLインジェクションの仕組み
(例)
userというユーザ情報が格納されているデータベースのテーブルに対し、入力されたIDに合致するデータを検索する。
↓
SELECT * FROM user WHERE id=‘$ID’
↓
SELECT * FROM user WHERE id=‘taro’ or ‘A’=‘A’
↓
‘A’=‘A’は必ず成り立つので情報漏洩確定
・SQLインジェクションによる被害
情報漏洩やWebサイトの改ざんなど。
・SQLインジェクションの対策方法
根本的なSQLインジェクション攻撃の対策としては、安全なWebサイト・Webアプリケーションを開発するこ とです。セキュアプログラミングでSQLインジェクションの脆弱性が存在しないWebサイトを制作することで対策可能。発生する原因は、本来実行されるべきSQLの構文が変更されるためなので、対策としては、Webアプリケーションがユーザから想定外の情報が入力されてもそのまま処理せず、正しくエラー処理を実施することが最重要事項となります。
代表的な対策方法は、「プレースホルダの利用」「エスケープ処理」「アプリケーションに渡されるパラメータにSQL文を直接指定しない」ことが挙げられます。
▼プレースホルダの利用
プレースホルダを利用することで、SQLの構文が事前に確定し、ユーザーからの入力値等によって不正なSQLが実行されることを防ぐことができます。
*プログラミングにおけるプレースホルダー => プログラミングのコードの中で、利用者が入力する値など、実行時に外部から与えられる要素を反映させたい場合があります。
その場合に、外部から与えられる要素が入る予定の場所のことをプレースホルダーと呼んでいます。
▼エスケープ処理
エスケープ処理とは、検索バーや入力フォームなどユーザーが入力できる機能を実装しているWebサイトに対して、特定の文字が普通の文字として解釈されるように処理することを指します。エスケープ処理を行うことで、SQLインジェクションを受けても、攻撃コードの中の特定の文字列や記号を削除したり置き換えたりして、攻撃を無効化できます。
▼アプリケーションに渡されるパラメータにSQL文を直接指定しない
Webアプリケーションに渡されるパラメータにSQL文を直接指定する実装は、そのパラメータ値の改変により、データベースの不正利用につながる可能性があります。IPAでは避けるべき実装として挙げられています。
・Webアプリケーションを常に最新バージョンに保つ
OSやアプリケーションのバージョンアップの中身は、ほとんどが脆弱性対策です。実行することで現段階に起こりうるリスクを下げることができます。
・クラウド型WAFでのセキュリティ対策
WAFはファイアーウォールやIPS/IDSでは防ぐことができない、Webアプリケーションの脆弱性を悪用したサイバー攻撃を防ぎます。SQLインジェクション以外の攻撃にも対応しているため、より安全にWebサイトを運用できるようになります。
*WAFについて↓
よくセキュリティ対策として「ファイアウォール」を耳にしますが、このファイアウォールは「インフラ/ネットワーク層」しか防御できません。、それ以外にも「ソフトウェア/OS層」や「Webアプリケーション層」という守らなければならないエリアがあります。「Webアプリケーション層」へのサイバー攻撃からWebサイトを守る「WAF」やソフトウェア/OS層を監視・防御する「IPS/IDS」を使い、多層防御を実現することがサイバー攻撃対策には必須です。
間違いやアドバイスなどあれば、遠慮なく言って欲しいです。
参考文献: