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

アプリケーションを制作する上で忘れてはならないのがセキュリティ面の担保です。悪意のあるSQLインジェクション攻撃によって、ユーザーの個人情報が漏洩したり、アプリが思わぬ動作をしたりしてしまう可能性があるからです。

プログラミング初学者であっても、インターネット上にアプリを公開するのであれば怠ってはいけないSQLのインジェクション対策。今回の記事では、SQLインジェクション対策とは何かについてご説明しつつ、SQLインジェクション対策の具体的な方法をご紹介していきましょう。

本記事の要点
  • SQLインジェクションの概要
  • SQLインジェクションの対策方法

SQLインジェクションとは?

対策方法の前に、まずはSQLインジェクションという言葉について詳しくご説明をしていきましょう。

SQLインジェクションとは、アプリケーション開発時に意図していなかったSQL文を強制的に実行させることです。SQLは、アプリケーションで使用しているデータベースを操作することができるため、データベースに格納されているデータが悪用される可能性があります。

SQLインジェクションの具体例

例えば、データベースのusersテーブルに、数万件の氏名・住所・電話番号が収録されているとしましょう。

usersテーブル

+------+---------+-------------+
| name | adress  | telnumber   |
+------+---------+-------------+
| Tom  | America | 0000000000  |
| Bob  | Canada  | 11111111111 |
.
.
.

この中から該当のデータを取得するSQLのSELECTステートメントは、以下の通りです。

SELECT * FROM users WHERE name = ‘Tom’;

しかし、このSELECTステートメントのWHERE以降にある条件を与えると、全てのレコードを取得できてしまうのです。

SELECT * FROM users WHERE name = ‘Tom’ OR 1 = 1;

WHERE以降の条件は、「nameカラムがTomのレコードを取得。もしくは1が1なら全てのレコードを取得」という意味になってしまいます。このようなSQL文を同時に何回も問い合わせられた場合、サーバに大きな負担がかかり、アプリケーションが応答できなくなる可能性があります。

SQLインジェクションが行われた事件

SQLインジェクション対策が万全でなかったために、これまで数多くの被害が発生してきました。以下はその一例です。

他にも数え切れないほど、SQLインジェクション被害が溢れています。アプリケーションを開発する上で、切っても切り離せないのがSQLインジェクション対策なのです。

SQLインジェクション対策に不備があった際の判例

「東京地判平成26年1月23日判時2221号71頁」において、SQLインジェクションによる個人情報漏洩事件を巡り、開発会社に対して3,232万円の損害賠償請求が行われたという記録が残っています。結果として裁判所側も原告の要求を一部認める形として、2,262万円の賠償を被告側に負わせています。

この判決に限らず、SQLインジェクション対策の不備によって生まれた損害は、賠償請求という形で開発者に求められることになるのです。

SQLインジェクション対策の具体的な方法

さて、ここまでSQLインジェクションの脅威について詳しく解説をしてきました。ここからはSQLインジェクションの具体的な対策方法について解説をしていきましょう。

エスケープ処理

SQLインジェクション対策の中でも最も基本的なものがエスケープ処理と呼ばれるものです。コードの一部として認識されてしまう文字を、認識されないように処理することをエスケープ処理と言います。

「コードの一部として認識されてしまう文字」としては、以下のようなものが挙げられます。

コードの一部として認識されてしまう文字
  • 「’」
  • 「¥」
  • 「\」

これらの文字はSQLに影響を与えうる文字のため、他の文字に置き換える処理が必要となります。言語ごとにエスケープ処理を行う関数などが用意されている場合がありますので、自分が使用する言語で調べてみましょう。以下は、エスケープ処理を行う関数の一例です。

phpのエスケープ処理を行う関数

mysqli::escape_string ( string $escapestr ) : string
mysqli::real_escape_string ( string $escapestr ) : string

Web Application Firewallの導入

Web Application Firewallとは、アプリケーションにアクセスしたユーザーが、不正な動きをしていないかどうか監視するセキュリティ対策の1つです。アプリケーションの管理者がWeb Application Firewallに検出パターンを設定することによって、SQLインジェクションなどを含む不正な動きをキャッチしてくれます。

ただし、Web Application FirewallはSQLインジェクションへの根本的な対策というよりは、広く浅くアプリケーションを守るためのものであると考えた方が良いでしょう。先ほどご紹介したエスケープ処理で根本的な脆弱性を無くしていきつつ、未知なる不正アクセスに対しての防衛策として考えましょう。

近年では、オープンソース型のWeb Application Firewallも増え、その代表として「ModSecurity」「WebKnight」が挙げられます。

セキュリティ(脆弱性)診断サービスの利用

セキュリティ診断サービスとは、アプリケーションに関わるシステムなどをチェックし、SQLインジェクションを含む、アプリの脆弱性を利用した攻撃を受ける可能性がないかどうかを診断してくれるサービスです。

エスケープ処理やWeb Application Firewallと異なるのは、セキュリティ診断サービス側が攻撃者の視点から、アプリケーションの脆弱性を事前に探してくれるという点。SQLインジェクションなどによる被害が起きてからでは遅いので、本格的にアプリケーションをリリースする前段階に、セキュリティ診断サービスを受けておくことが重要です。

ポテパンダの一言メモ

セキュリティ診断サービスは、無料のものと有料のものがあります。個人でプログラミングを勉強して開発した小規模アプリケーションであれば、まずは無料のものを試してみると良いでしょう。特に初心者でも気軽に使用できるセキュリティ診断サービスとしては「OWASP ZAP」が有名です。

まとめ

今回の記事では、SQLインジェクション対策とは何かについてご説明しつつ、SQLインジェクション対策の具体的な方法をご紹介していきました。

本記事でご紹介したように、SQLインジェクション対策は比較的簡単に導入することができます。アプリケーション開発においてSQLを組み込むのであれば、忘れずにSQLインジェクションの対策をしましょう。

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

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

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

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

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

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

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

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

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

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

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