バグとサニー

http://miraclemiracle.seesaa.net/article/28984781.html

いろんな人がいろいろな意味で使うということはあまりないんじゃないのかなと。多くの人が「HTML特殊文字エスケープすること&SQLでシングルクォートをエスケープすること」として使っていると思います。ただ、それは普通に息を吸ったら吐くくらいの感覚で行うべきことですし、その自然な行為に「サニタイズ」という言葉をつけることの愚をキャンペーンしていると思っています。

http://bakera.jp/hatomaru.aspx/htmlbbs/article/3053

高木さんが思っているサニタイズのイメージは「本来は必要ないがセキュリティ上の問題を解決するためだけに仕方なく入れる処理」というものだと思います。というか私がそういうイメージを持っています。

XSSや各種インジェクション系などの脆弱性の原因となる特殊文字エスケープし忘れというのは、つまるところバグです。セキュリティ上の問題とかいう前にまず正常に動作していないわけです。これらの問題が起こらないようにする処理は正常に動作させるために必要だから入れるのであり、セキュリティ上の問題のためだけに入れるものではありません。なのでこの処理のことを『サニタイズって言うな』と思うわけです。

正常に動作させるために必要な特殊文字エスケープや除去処理のことをサニタイズと呼ばないとすれば、ほとんどのWebアプリではサニタイズは必要ないと言えるのではないでしょうか。

http://bakera.jp/hatomaru.aspx/ebi/topic/2370

SQL文の発行の際には普通にエスケープ処理をしておけばそれだけで十分であり、特別に「悪意ある入力を無害化する」ということを意識しなくても良いはずだ、というお話でしょうか。確かに、セキュリティ云々を抜きにして考えても、ユーザが検索文字列に単引用符(')を含めたら SQL のエラーが出る、というのはバグでしょうし、そういうバグが起きないように書いていれば、自然と SQL インジェクションなどできない状態になっているはずです。

実は「サニタイズ」と一口に言っても、そこには全く違う 3つの方法論があるのですね。

  • 問題が起きる文字列をエスケープして処理する
  • 問題が起きる文字列を削除してしまう
  • 問題が起きる文字列を含む入力はエラーにしてしまう

これを、たとえば単引用符(')を検索したケースに適用してみますと、それぞれ以下のような結果になるでしょう。

  • 単引用符が検索され、単引用符を含む項目がヒットする
  • 単引用符が削除され、空白文字列が検索されたことになる
  • 単引用符を含む文字列は検索できません、というエラーが出る


どれが望ましいかは明らかです。二番目の結果はユーザの意図と異なるものが検索されてしまう不具合、三番目の結果も不具合に近いでしょう。

しかし、どれも「サニタイズしている」ことには間違いありません。サニタイズしてください」と求めた場合、一番目ではなく二番目、三番目の処理をされたとしても文句は言えません。ですので、「サニタイズ」という万能の言い方をするよりも、具体的にどうするのかを明確にして議論した方が良いと言えるでしょう。


http://bakera.jp/hatomaru.aspx/htmlbbs/article/3073

バグにより生じる脆弱性の場合、「バグを修正する」「脆弱性を無くす」という2通りのに対処方法が考えられます。セキュリティ屋としては脆弱性を無くすという考え方で問題ありませんが、開発者としてはバグを修正すると考えるべきです。そうしないと根本的な問題が放置されてしまう可能性がありますし、バグとして扱えば最初から出さないように注意することも期待できます。

動作上必要な処理と、脆弱性を無くす為の処理を同じように「サニタイズ」と呼んでしまうと、このような考え方をするのを阻害してしまいます。セキュリティ屋的にはバグが原因かどうかはどうでも良いことなので両方ともサニタイズであっても問題無いですが、開発者的にはそれが大変重要な点なので、前者はサニタイズではないのです。

なので区別されているのはセキュリティ屋と開発者です。

ふーむ。