「サニタイズの話つづき」へのコメント
「水無月ばけらのえび日記 : サニタイズの話つづき」について、4件のコメントが書かれています。
[3083] Re: 「サニタイズの話つづき」
名無しさん (2005年7月19日 12時59分)
ここにこの投稿をくっつけると話が唐突になるかもしれませんが、続きで読んでもらっていると期待して…
>>>高木さんの言う「適切にプログラムを記述す」るというのは、データや命令等について、情報としてのメタレベルを適切に判断し、それらをそれぞれのメタレベルに合わせて適切に扱う、ということではないでしょうか。
>>の意味は伝わったでしょうか?
>
> 特に難しい表現ではないと思うので、私は私なりに理解できたつもりではあります。しかし、名無しさんの意図と一致しているかどうかは分かりません。
> 伝わっているかどうか怪しいと思われているのであれば、例を挙げて説明していただけると分かりやすいかと。
引き続き SQL 文を例として使います。すでに特定の文脈で例として適切でなかったとありますが、このことが説明の障害にはならないと考えています。
ここでは文字集合とその符号化方式について考えます。
SQL 文を発行するときには、その文を書くために使える文字集合と符号化方式がそのプロセッサの仕様として定義されているはずです。同一の機能を実現するための手段が複数あったとしても、それは定義されています。
その SQL 文において、文字列リテラルとして使える文字集合と(広い意味での)符号化方式は SQL 文そのものに使えるそれらとは異なっているのが通常です。そうでなければ、たとえば(文字列を固定長とするなどの他の手段を用いない限り)文字列リテラルの終了をプロセッサが認識できないからです。こちらの文字集合と符号化方式もプロセッサの仕様として定義されているはずです。
この文字集合と符号化方式のセットが文字列リテラルの書式の一部を構成しています。
SQL 文を書くときには、この書式を守らないことには話になりません。つまり SQL 文のプロセッサには、そのプロセッサの仕様に従った文字集合と符号化方式に従ったデータを渡す必要があるわけです。このこと自体には異論はないと思います。
これに対して、フォームで文字列を入力として受け取る事を考えます。
その文字列の文字集合と符号化方式は上の SQL 文のプロセッサの仕様とはまったく関係のないところで決まります。
その文字列を SQL 文のプロセッサに渡すためには、当然、調整が必要になります。
入力文字列をその符号化方式に従ってデコードし、それを SQL 文のプロセッサの仕様に従った文字列リテラルにエンコードして SQL 文を構成する必要があります(コード上は明示的におこなわれないことがあるかもしれませんが、その場合でも暗示的にはおこなわれており、抽象的には必須の過程です)。
ここで具体的にこれらの文字集合と符号化方式を見ると、それらはそれぞれかなりの部分が重なって、ほとんど同じになっているケースも多いのではないかと思います。
しかし実際にはそれらはそれぞれに固有で別個のものです。特に入力文字列と文字列リテラルのそれはほぼ確実に内容も異なります。
これが何を表すのかは必要ならば後で述べますが、必要ないかとも思います。
「単引用符がそのまま SQL に渡る」のような表現は上記の観点からはあいまいな表現になってしまっていると思われます。
SQL 文のプロセッサが文字列リテラルに使えると定義する文字集合が単引用符を含む限り、「文字としての」単引用符はそのまま渡せるわけです。適切な符号化方式が使われている限り。
符号化方式を無視して何らかのビット列をそのまま SQL 文のプロセッサに渡したとしたら、それはむしろきっと意味的には同じデータをそのまま渡せていないことになります。
とりあえず、ここまででコメントいただけますか?
[3084] Re: 「サニタイズの話つづき」
名無しさん (2005年7月19日 13時21分)
>>本来なすべき事柄が正確に理解されないまま放置されるからです。すなわちここで指摘されているのは「思考停止」です。
>
> ここはちょっと違いますね。少なくとも該当の記事の中では、「放置される」という現象が起きるとは述べられていないように思いますし、高木さんの上げられているケースでも、「セキュリティ上の問題が存在しており、解決する必要がある」というところまでは正しく伝わっているのではないかと考えます。
その「放置される」というのは、私の書いた「放置される」と違っているような気がするのですが、そんなことないですか?
ところで、「高木さんの上げられているケース」というのはどれのことでしたっけ?
[3088] Re: 「サニタイズの話つづき」
ばけら (2005年7月19日 13時52分)
>その「放置される」というのは、私の書いた「放置される」と違っているような気がするのですが、そんなことないですか?
「放置される」=何も対策がなされない、と理解しましたが、違いましたか。「適切な」対策がなされない、という意味で「放置」と言われているのであれば、それはそれで正しいのではないかとも思います。
>ところで、「高木さんの上げられているケース」というのはどれのことでしたっけ?
「開発者にとっては綺麗にプログラムを書くことが大命題であり、セキュリティ屋が(セキュリティ関連の)問題を指摘してくると『プログラムが汚くなる』としてそれを嫌う人が多い」
という話です。「汚くなる」という反発があったとしても、脆弱性が存在するということ、対応が必要であるということは伝わっているのではないかと思うのです。
適切な対応が出来るかどうか、という点がまさに問題になるのですが、何らかの対応が行われるということは期待してよい状況のではないかと思いました。
[3090] Re: 「サニタイズの話つづき」
名無しさん (2005年7月19日 14時38分)
例によって蛇足すると、
>それらの対処をひとくくりにサニタイズと呼んでしまうと、りゅうさんの言われるように根本的な問題の解決から離れてしまう、という危惧があるのだと思います。
>本来なすべき事柄が正確に理解されないまま放置されるからです。すなわちここで指摘されているのは「思考停止」です。
これらの文は、
「それらの対処をひとくくりにサニタイズと呼んでしまうと」「思考停止」に陥る結果「本来なすべき事柄が正確に理解されないまま放置されるから」「根本的な問題の解決から離れてしまう」と危惧される、という意味で読んでほしいと思いました(ニュアンスは微妙に異なってしまいますが)。
文章がわかりにくくてすみません。というか私の文章って、論理的なつながりがそもそも期待できないくらいマズいですか?本気で不安です。
「水無月ばけらのえび日記 : サニタイズの話つづき」についてコメントを書く場合は、以下のフォームに記入してください。