みかままさんの日記をみていて、知ったニュース
セキュアなWebアプリ実現のために本来やるべきことは? - 高木浩光氏
の下のほうにある、「事後的な「サニタイズ」ではなく、最初からきちんと動作するプログラム作りが必要」
で出てくる
「現在『サニタイズって言うな』キャンペーンを行っているところ」
っていう話。まあ、だれが、どんなキャンペーンを行うのもOKなんで、これ自体、別にいいんですけど、
「セキュリティ以前にきちんと(本来処理されるべき)記号のエスケープ化などを行っていないということだし、すなわち本来入力されうる文字列を処理できなくなるということでもある」
に関して、ちょっち、気になるので、つっこみ。
これ、SQLインジェクションが起きた後になってからは、いえることなんだけど、今問題になっているのは、SQLインジェクションの問題が言われる「前」に開発したシステムに関してですよね。
その時点では、SQLインジェクションの問題は起きていなかった。
そうすると、ですよ、ログイン名のところに、itazura' OR 'a'='a という文字列
(こういう文字列を入れてSQLインジェクションを起こす)を入れるケースって、
まず考えられないですよね!
その状況で、SEやテスター(テストエンジニア)が、この文字列だけを、同値分析のときに、同値でないとはじけるかどうかっていうのが、この議論の中心ですよね(もし、同値だと思ってしまえば、これがテストケースになる可能性は、天文学的に低くなり、SQLインジェクションの問題が言われる「前」に開発したシステムにおいては、事前にテストや設計ではじくことは、酷ということになる)。
これ、知ってないと、はじけないと思います。
同値分析でここまで気が回るのは、たぶん、エスケープしないといけない文字をしっていて、そのエスケープの関係で、同値でないとしている人だけだと思います。
で、今度、逆に、入り口でエスケープしてしまうと、DBアクセスの共通部分では、エスケープできないっていうことになりますよね(両方エスケープしたら、2重にエスケープしてしまう)。
そうするとですねえ、
共通部分でできない
=みーんなちゃんとやってね!ということになり、
=開発にかかわるすべての人が、SQLインジェクションに対しての知識と、文字列のエスケープの知識を持っていて、全員が、そのコーディング方法を守んないといけない。で、このような周知徹底をPMがやんなきゃいけない。
これは、PMに対して、酷というものです。
それより、そのようなSQLインジェクションの知識を隠蔽化し、共通部分で、サニタイズをかけ、入力チェック側では、通常のチェックをして、エスケープを「しない」でもらったほうが、開発(修正)コストは安く済むと思うし、そっちのほうが、現実的だという気もしなくもない。
なんで、そんなことは、共通部分の開発がやってあげればいいような気がするんだけど。。。
でも、えらーい人が講演して、「サニタイズって言うな」っていってるんだから、それにしたがわなきゃいけない雰囲気になるんでしょうな、きっと。
そして会社は、莫大な修正コストをかけて、多分死ぬほど大変な思いをPMがして、周知徹底させ、できっこないから、PMが、死ぬほど怒られ、悩み傷つき病気になると。。
うーん、業界してるう!!