0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLインジェクション問題と、エスケープによる対処方法について

Posted at

はじめに

エンジニアが携わるセキュリティに関する問題として、一番最初に目にするのは、SQLインジェクション問題ではないでしょうか。
そこで、SQLインジェクション問題とはどういったもので、どうすれば対処できるか? ということについてまとめてみました。

SQLインジェクション問題とは

SQLインジェクションとは、Webアプリケーションに対する攻撃の一種です。
SQLの脆弱性を突き、データベース上の情報を盗み取ったり、改ざんしたりすることが可能となります。
もし企業が会員の顧客情報を流出してしまったら、それだけで倒産となる可能性も十分にありうる時代です。
セキュリティの観点からいって、必ず対処しておくべき問題のひとつといえるでしょう。

具体的な例

以下のようなSQL文で考えてみます。

select * from 会員テーブル where 会員番号='○○';

このとき、会員番号は1,2,3..というような整数の値を取ることにします。

select * from 会員テーブル where 会員番号='1';

1つの整数につき、1つのデータのみが該当するので、常に0件か1件の答えが返ってくるはずです。
システムとしては、そのように想定されて作られています。

しかし、ここで以下のような入力をおこなったとします。

select * from 会員テーブル where 会員番号='1' or 会員番号 > '0';

すると、会員番号が1もしくは0より大きい数字をデータベースより探すことになります。
もちろん、データベース上のすべてのデータが該当することになります。
そのため、システムとしては予期せぬエラーが発生していることになり、ストップしてしまう可能性があるのです。

エスケープによる対処方法

SQLインジェクション問題を解決するためには、SQL文に一工夫を加えることが必要です。

select * from 会員テーブル where 会員番号=?;

上記のような書き方をすると、特殊記号である『'』や『;』がデータベースの読み込みに使われることなく、そのままの文字列としてみなされます。
結果として、不正な入力を防ぐことが可能となります。

最後に

データベースのセキュリティを高めることは、エンジニアとして重要な仕事です。
一つずつ対処法を覚えていき、より強固なセキュリティを作り出していきましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?