バックエンド
WEBセキュリティ対策の基礎知識 SQLインジェクション編
目次
SQLインジェクションとは
SQLインジェクションとは、脆弱性を狙った主なサイバー攻撃の一つ。
管理サーバのデーターベースを参照することでサービスを提供するWEBサイト(ショッピング系ECサイトなど)に対して、本来サイト側が想定している命令とは別のSQL文章を送信することで、不正に個人情報や機密情報を引き出すというサイバー攻撃である。
SQLインジェクションの原因
根本的な原因は、WEBアプリケーションが不正アクセスの意図があると知らず、外部から送信されたSQL文章を誤解してしまうことにある。
そもそもWEBアプリケーションの多くは、ユーザーが入力した情報をSQLと呼ばれる言語に変換することで動作しています。攻撃者はこの性質を利用して、「カード情報を開示しろ」とSQL形式で命令を送りる。
その結果、上記のような正規の命令だと認識する「誤解」が起きてしまい、情報が流出してしまう。
SQLインジェクションを受けやすいサイト
SQLインジェクションのターゲットにされやすいサイトは、大量のデータを保有していてSQLで制御が必要な、ショッピングサイトやポータルサイト、決済サイトなどが当てはまる。
SQLインジェクションを受けてしまうと・・・
SQLインジェクションによる攻撃を受けると、データーベースに記録されている情報が抜き出されてしまいます。被害は攻撃者が求めている情報によるが、企業コンテンツが攻撃対象となった場合は、とくに以下の被害が懸念される。
- 登録ユーザーのカード情報の漏洩(データベースに情報が残る決済方式の場合)
- 取引顧客の個人情報や契約内容
- WEBサイトの改ざんによる多種多様な被害
SQLインジェクションを受けないために
バインドメカニズムの導入
SQL文章のひな形を準備した上で、プレースホルダに入力情報に基づいたひな形を割り当てることで、SQL文章を生成する機能。不正なSQL文章を直接反映するわけではないため、実行を阻止できる。
WAFの導入
WAFはwebアプリケーションレベルでの防御を行うため、SQLインジェクションに対して有効な防御策である。
SQLインジェクションのテストを実施
SQLインジェクションは入力された命令に従って、WebアプリケーションがデータベースへSQLクエリを送信することで行われる。そのため、検索フォームやログインフォームなど、SQLクエリ送信が行われる場所に対してテストを行うことで、自社サービスの安全性をテストすることができる。
自社でテストを行うことが技術的に難しい場合、セキュリティを専門としている企業に対して、テストの実施を要請すると良い。また、利用を検討しているセキュリティ企業がある場合、SQLインジェクションに対する質問は、必ず行っておくべき事案である。
今回得られたこと
過去にSQLインジェクションによって情報が漏洩してしまった事態は数えきれない。このようなサイバー攻撃が無くならないことも腹立たしく思うが、攻撃に備えることの大切さを学んだ。
この記事へのコメントはありません。