ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

本当は怖いサンプルコードのコピペの話

あちこちのサイトや本で初心者向けと称してサンプルコードが幾つか載っているのがあるけど、その多くはセキュリティ上問題があることが多い気がする。まあ、実例を挙げると名誉毀損で訴えられるとやなのでやらないけど(意気地なしw)
例としてあげるとこんなのがあったりするorz
ここで「code」は入力されたデータをそのまま代入している。

Query = "select * from syain where code = ";
Query += "'";
Query += code;
Query += "'";
try {
    rset = stmt.executeQuery ( Query );
    ret = rset.next();
}
catch( SQLException e ) {
    System.out.println(e.getMessage());
    ret = false;
}

実際幾つかの本やサイトを確認したが、古いものは特にセキュリティについての言及が全く無い。また、最近の本やサイトでも、「セキュリティに関しては難しくなるので後で説明します」と言うようなことが書かれていることがある。
しかし、ここで非常に疑問なのだが、本当にセキュリティに関することは難しいことなのか?確かに難しいこともあるが、コードに存在する脆弱性XSSとかSQLインジェクション)に関する限り、そんなことは無いだろうと思う。それは書いている本人が「セキュリティ=難しい」という思考に凝り固まってはいないだろうか?
例えば先の例であれば「code」に「'」が含まれていた場合エラーになると言うことはちょっと考えればわかるだろう。そのようなことが起こらないようにするというのがプログラマとして普通じゃないのか?(いやまあ、エラーになるのが仕様だといわれりゃごめんなさいと言うしかないけどな。にしても、そこから任意のSQL文が組めるんじゃね?と考えて欲しいけど、少なくとも入門サイトとか本とか書くのなら)そして、そのようなデータを入力データ含んでいても、正常に処理が出来るようにサンプルと言うのは作るべきじゃないのか?と思うんだよねぇorz
初心者に説明が難しいのであれば、この部分はおまじないですと言うのでもいいじゃないか。
少なくともそうすれば、何もわからずサンプルプログラムをコピペするコピペer(敢えてプログラマとは言わないw)が組み込んでしまう脆弱性を防ぐことができると思う。

しかし、ダメダメなサンプルコードって「1週間で作るECサイト」みたいな本とかサイトに多いんだよなぁorzで、そういうのって、よくわかってない人がそのままコピペしちゃうんだよねぇ、きっとorz