作者: ねこ丸
日時: 2007/6/18(16:42)
  ねこ丸です。

藤岡和夫 writes:

> On Thu, 14 Jun 2007 17:59:04 +0900 (JST)
> > Webアプリケーションを作る前に知るべき10の脆弱性 − @IT
> > http://www.atmarkit.co.jp/fsecurity/column/ueno/47.html
> 
>  なかなかまとまっているような・・・

  一つの考え方ではありますが、本来同じ考え方、同じ対策でよいのに、複数
の異なる脆弱性があるかのように読める部分は無駄、あるいは誤解のもと、と
も言えます。

  上の記事を書いた人は以前から高木さんに手ひどく突っ込まれていることが
ある(顔見知りらしいですが)ので、そのスジをチェックしている人の間では
ちょっとした有名人ですね。恐らく今回のフリはそれも踏まえてのものなんだ
と思います。

※ まぁ今回は OWASP の方の問題なんでしょうけど

高木浩光@自宅の日記 - 駄目な技術文書の見分け方 その1
http://takagi-hiromitsu.jp/diary/20061104.html
今夜分かるSQLインジェクション対策 − @IT
http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html

  の辺り。

  特に PHP がそうなので引き合いに出しますが、PHP にはスクリプト起動時に
かつて便利だと思われていたことを自動的にあれこれする機能があります。例
えば入力値の中に SQL インジェクションを引き起こす可能性のあるクォーテー
ションが入っているとまずいので自動的にバックスラッシュで「サニタイズ」
する、などです。

  しかしちょっと考えたら分かることですが、「入力段階」で自動的に行われ
る「サニタイズ」は、入力値を「そのまま」SQL に放り投げる場合にしか有効
ではない(加工したら加工後のデータに対して行わないと意味がない)ですし、
SQL ではなく PHP で何かと比較する際には「元に」戻さないとそもそも比較が
成り立ちません。(勝手に入力値が変更されちゃってるんですから。)

※ おまけにマルチバイト環境ではこの機能が原因で文字化けに悩まされること
もあります。

  えーということで、最近はこの手の機能はおせっかい機能と呼ばれていまし
て、こんなのは off にして自分でチェックしろと言われているわけですが、で
はどこでチェックするのかというと、それは「利用する瞬間」なわけです。利
用するシーンが違えば注意しなきゃいけないポイントも違うわけですが、この
データは外部からきたものなのか?それを今からどのように利用するのか?を
考えるクセがついていればいんじゃね?という指摘も、まぁ分からんではない
かなと思います。(例えば SQL として利用する際にはこれを気をつける、
HTML として出力する際にはこれを気をつける、といった具合ですな。PHP なら
スーパーキャッチーに sqlescape() とか htmlescape() とかそういう関数をバ
ンバン作りゃいいんです。)

  どういう利用のシーンでどういうチェックを行うかが、もう少しきれいにま
とまっていたらよかったかなぁという感じはしますね。まぁ今回は単に脆弱性
を列挙するだけの記事のようですから、それは贅沢言いすぎでしょうけど。
  個人的には「悪意のあるファイルを読み込んで実行」とか「オブジェクトの
直接参照」みたいな分け方は、変に問題をややこしくしているような印象を受
けます。悪意の有無に掛からず、予期せぬリソースの読み込みが起こらないよ
うにするにはどうしたらよいか?と考える必要があるわけですし、この二つが
分かれてるのにインジェクションは一緒くたってどうなんだ、とも思います。

  てな感じでよろしいでしょうか? > Bruce. さん

--
    ねこ丸