結論が出たので

先日のやばかった時のことを書くことにします。
先日も書いたとおり、この虚弱性はSQLインジェクションという名前がつけられている、とても有名なものです。これについて解説します。
多くのデータを管理しようと言う場合、データベースソフトを使うことが多くあります。これを使う理由は様々ですが、一言で言うなら便利だからというものに尽きるでしょう。膨大なデータの場合、テキスト形式で保存したりすると検索する時などに不便です。かといって、2分木探索がやりやすいように自前で保存したりするのは面倒です。この部分を代わりにやってくれるのがデータベースソフト、DBMS(Data Base Management System)というものです。データベースソフトの中ではリレーショナルデータベースソフト(RDBMS)が使われることが多いようです。
このRDBMSに対しての命令が必要になることがあります。これがSQL(Structured Query Language)というものです。このSQLには規格があり、ほとんどのデータベースソフトはこれに対応しています。ただし方言などもあり、データベースソフトによって互換性が100%あるとは言いがたいものがあります。このSQLを介して、1.データベース自体を作ったり、2.データを挿入したり、3.データを検索したり、4.データを削除したり、ということが出来ます。
これはものすごく危険なことです。例えばデータベースの多くには、個人情報などが保存されていることが多いです。これを勝手に検索されたりしたら、とんでもないことになります。ですから、そのようなデータにはアクセスされないようにプログラム側で制御する必要があります。
ところが、そのプログラムに穴があると、勝手にそのようなSQLを発行することが出来たりします。すなわち、勝手にデータを盗んだり、挿入したり、あるいは削除したり出来る可能性があるのです。これをSQLインジェクションといいます。多くのデータベースにアクセス可能なプログラム言語では、それが発生しにくい作り方を提供しています。プレースホルダーと呼ばれるものがそれの一例です。

とりあえず、今はここまで。飲み会に行ってきます。