Webサイト制作コースのお申し込みはこちら

未経験からエンジニアを目指している方やプログラミングを学習中で、いずれはプログラマーとして働きたいという方も少なくありません。

精力的にプログラミングスキルを身に付けている中で、どうしても手を出しづらいのがセキュリティ対策分野ではないでしょうか。確かに、実際に働いてみる機会がなければセキュリティ対策の重要性を感じることができません。

しかし、セキュリティ対策への知見があれば相対的に実務未経験プログラマーとしての市場価値は上がります。特にSQLインジェクション対策に関するスキルがあることが理想的でしょう。

今回の記事では、SQLインジェクションを聞いたことがないという方でも分かりやすいように以下の内容を解説していきます。

本記事の要点
  • SQLインジェクションとは何か
  • SQLインジェクションの具体例
  • SQLインジェクションへの対策方法

SQLインジェクションとは

SQLインジェクションとはデータベースを用いたWEBアプリケーションに対する攻撃方法の1つです。名前の通り、SQL文にWEBアプリケーションの脆弱性を狙ったキーワードを混入させて、WEBアプリケーションの誤作動などを引き起こすことが目的の攻撃方法です。

SQL文ってなに?

SQL文とは、データベースに直接命令するための言葉です。データベースを用いたWEBアプリケーションでは、SQL文はさまざまな場面で用いられています。例えば、検索キーワードやメッセージ送信フォームなど、ユーザーが入力できる部分にもSQL文が使用されているので、SQLインジェクション対策は非常に重要です。

上記Q&Aにもあるように、データベースを用いらWEBアプリケーションでは、検索フォームメッセージ投稿ブログ記事削除など、さまざまな場面で管理者以外のユーザーがデータベースにSQL文を発信する機能が実装されることが多いです。

SQLインジェクション対策が不十分のままだと、悪意のあるユーザーがSQLインジェクションを仕掛け、WEBアプリケーションが落ちてしまったり、他ユーザーも含めたデータベースが削除されてしまったりする可能性もあるのです。

ポテパンダの一言メモ

2005年に発生したクラブツーリズムのクレジットカード情報を含む個人情報漏洩事件や、価格.comのウェブサイト改竄事件などはSQLインジェクションが原因だと言われています。中にはSQLインジェクションによって倒産に追い込まれた企業も存在します。SQLインジェクション対策をしっかりと行わなければ、後々、大問題に発展する可能性が大きいのです。

SQLインジェクションの例

次にSQLインジェクションが起こりうるコードを実際に見ていきましょう。

SELECT * FROM products WHERE shop = {SHOP_NAME} AND productname = {PRODUCT_NAME};

こちらのSQL文は、入力されたSHOP_NAMEと、PRODUCT_NAMEに合致するレコードをproductsテーブルから引き出そうとしているものです。SQL文に慣れている方であれば、上記のコードがいかにありがちであるか実感することができるでしょう。

しかし、{PRODUCT_NAME}に以下のキーワードを挿入することによってSQLインジェクションを行うことができるのです。

SELECT * FROM products WHERE shop = {SHOP_NAME} AND productname = {PRODUCT_NAME} OR 1 = 1;

お分かりでしょうか。「OR 1=1」というキーワードを挿入することによって、「1が1ならproductsテーブルのレコードを全取得する」というSQL文になってしまうのです。

小規模WEBアプリケーションであれば問題なく取得できるでしょうが、顧客データを何万、何十万と扱う大規模WEBアプリケーションの場合はSQL文の出力結果を処理しきれず、WEBアプリケーション自体が落ちてしまう可能性もあるのです。

ポテパンダの一言メモ

SQLインジェクションに関わらずセキュリティ対策を行わないということは、常にWEBアプリケーションの管理者サイドにリスクを負わせるということに直結するのです。セキュリティ対策に対してどれだけの知見を持っているかどうかが、実は実務未経験エンジニアの評価基準だったりするのですよ。

SQLインジェクションへの対策

SQLインジェクションの恐ろしさを感じていただいた上で、こちらではSQLインジェクション対策スキルをご紹介していきましょう。

サニタイジング(エスケープ)処理

一般的なSQLインジェクション対策としては、サニタイジング(エスケープ)処理が有名です。サニタイジングとは、HTMLで用いられる「’」や「;」などといった特殊文字を、別の文字に置き換えたり、受理しないことです。

特殊文字は、SQL文として認識された際に最も誤作動を発生させやすい原因となりかねません。そのため、SQL文が誤作動を起こさないための処理としてサニタイズが必要となります。言語やフレームワークによってサニタイズの方法が異なりますので、自身が使用する言語・フレームワークに従って、適切にサニタイズするようにしましょう。

SQLインジェクション対策スキャナの使用

自動でSQLインジェクション対策を行ってくれる便利なツールSQLインジェクション対策スキャナについても理解を深めておくべきでしょう。このSQLインジェクション対策スキャナについてはいくつかの種類がありますが、それぞれ使用目的が異なるため、目的に合わせて使い分けたり、組み回せて使用したりすることがおすすめです。

Automagic SQL Injector

オートマチックにSQLインジェクションの侵入テストを行ってくれるSQLインジェクション対策スキャナです。MicrosoftのSQLサーバーエラーが返ってくる脆弱性を利用して、SQLインジェクション対策スキャンを行ってくれます。

SQID – SQL Injection digger

WEBアプリケーション上入力フォームを使用して、WEBアプリケーション上のSQLインジェクションが可能な脆弱性を発見してくれるスキャナです。コマンドライン上で動作するタイプになっており、SQLインジェクションが可能な脆弱性だけではなく、SQLのよくあるミスなどを指摘してくれる優れものとなっています。

BobCat

AppSecIncが行っているリサーチをベースに設計されており、SQLインジェクションが可能なWEBアプリケーションの脆弱性を発見してくれるツールとなっています。また、実際にWEBアプリケーションを利用するユーザーが操作可能なテーブル全てを監査してくれるため、こちらのツールのスキャンテストを通過したWEBアプリケーションは非常にセキュアなアプリであると言えるでしょう。

SQLBrute

データベース内にある全てのデータに対してSQLインジェクションを行い、SQLインジェクションが可能なWEBアプリケーションの脆弱性を発見できるというツールです。スキャン対象のWEBアプリケーションに対して実際にSQLインジェクションが行われるため、どのような脆弱性を保有しているのかが分かりやすいです。

まとめ

今回の記事では、SQLインジェクションを聞いたことがないという方でも分かりやすいように、「SQLインジェクションとは何か」「SQLインジェクションの具体例」「SQLインジェクションへの対策方法」についてご紹介してきました。

SQLインジェクション対策に限らず、WEBアプリケーションのセキュリティ面の担保は非常に重要。エンジニア必携のスキルであると言えるのです。今回の記事を熟読した上で、まずはご自身の言語やフレームワークに合わせたSQLインジェクションの方法について学習していきましょう。

【関連記事】
▶︎SQLで重複を削除するサンプルコード 最新データを残してdeleteするには?
▶︎SQL if文のサンプルコード集 NULL判定や、Switch文のような分岐をする方法
▶︎sqlコードの意味がわからない…不思議なSQLコードサンプル集

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。