アカウント名:
パスワード:
ステートメントとデータは別扱いなのでは。NULLという人名がステートメント扱いされるのなら、SQL文やプログラムコードとして解釈可能な建物名とかを住所として登録すると実行するわけだ。セキュリティホールそのものですね。
システムのバグらしいので、通常のシステムであればありえない話です。
#作者によるバックドアは裏仕様です
件の処理系を触ったことがないので全く違うかもしれませんが、データを実行してしまうインジェクション系の話ではなくて、文字列の 'Null' を、比較処理において NULL 値に暗黙に変換してしまうような、そういうたぐいの型システムの不備ではないでしょうか。
Wikipedia見ると「Adobe FlashはActionScriptというJavaScriptと類似したプログラミング言語を内包しており、~」「Adobe Flexはその長所をさらに拡げ、~」とか書いてあるから、わりとそんな感じなのかも。
たとえばPHPの場合だと、まさに「それは仕様です」だろうな。PHPだと下手すると標準ライブラリの中でも、そんな暗黙の型変換をやってくれるから、完全に潰すのはかなり手間。
タレコミに書かれてるとおり、> SOAPエンコーダのバグでしょ。SOAP とは、一言で言えば「オブジェクトをテキスト(XML)で表現」するためのプロトコル言語処理系の問題ではなくライブラリの問題。。
オブジェクト中の文字列型プロパティをテキスト化(エンコード)するときに、・基本は文字列をそのままテキスト出力、null値の時は「Null」という文字列で出力して、テキストからオブジェクトへの読み込み(デコード)側では・基本は読み込んだテキストをそのまま文字列化、「Null」というテキストの時はnull値になんてことをしていたのでしょう。
文字列Nullをエンコードしてデコードしたらnull値になっちゃう、と。
わかりやすい解説ありがとうございます。
確かに、文字列型の場合は空文字列が想定されるから、XMLでオブジェクトを表現する際、要素が空である場合にNULL値とみなすような実装はできない…、でも属性で示せばいいんじゃない?と思って調べてみたところ、やはりSOAPにはちゃんとNULL値を示す属性があるようですね。それを使わずに、俺々エンコード・デコードを組んでしまった(しかも 'Null' という簡単な文字列をキーワードにして)ということなんでしょうかね。
> 文字列の 'Null' を、比較処理において NULL 値に暗黙に変換確かに処理自体は違うのですが、これはインジェクション系の場合でも、問題点としては同様とみなせると思います。
minet氏は理解しておられるのでいいのですが、これを処理系のバグだと理解していない人もいるようなので、話が噛み合なくなっているようです。
#単なるバグなので通常はありえない#PG設計が悪いのは論外 (自殺願望があるのなら止めはしない)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
理解不能 (スコア:0)
ステートメントとデータは別扱いなのでは。
NULLという人名がステートメント扱いされるのなら、
SQL文やプログラムコードとして解釈可能な建物名とかを住所として登録すると実行するわけだ。
セキュリティホールそのものですね。
システムのバグらしいので、通常のシステムであればありえない話です。
#作者によるバックドアは裏仕様です
Re:理解不能 (スコア:2)
件の処理系を触ったことがないので全く違うかもしれませんが、
データを実行してしまうインジェクション系の話ではなくて、
文字列の 'Null' を、比較処理において NULL 値に暗黙に変換してしまうような、そういうたぐいの型システムの不備ではないでしょうか。
Re:理解不能 (スコア:2)
Wikipedia見ると
「Adobe FlashはActionScriptというJavaScriptと類似したプログラミング言語を内包しており、~」
「Adobe Flexはその長所をさらに拡げ、~」
とか書いてあるから、わりとそんな感じなのかも。
たとえばPHPの場合だと、まさに「それは仕様です」だろうな。
PHPだと下手すると標準ライブラリの中でも、そんな暗黙の型変換をやってくれるから、
完全に潰すのはかなり手間。
Re:理解不能 (スコア:1)
タレコミに書かれてるとおり、
> SOAPエンコーダのバグ
でしょ。
SOAP とは、一言で言えば「オブジェクトをテキスト(XML)で表現」するためのプロトコル
言語処理系の問題ではなくライブラリの問題。。
オブジェクト中の文字列型プロパティをテキスト化(エンコード)するときに、
・基本は文字列をそのままテキスト出力、null値の時は「Null」という文字列で出力
して、テキストからオブジェクトへの読み込み(デコード)側では
・基本は読み込んだテキストをそのまま文字列化、「Null」というテキストの時はnull値に
なんてことをしていたのでしょう。
文字列Nullをエンコードしてデコードしたらnull値になっちゃう、と。
Re:理解不能 (スコア:1)
わかりやすい解説ありがとうございます。
確かに、文字列型の場合は空文字列が想定されるから、XMLでオブジェクトを表現する際、要素が空である場合にNULL値とみなすような実装はできない…、でも属性で示せばいいんじゃない?
と思って調べてみたところ、やはりSOAPにはちゃんとNULL値を示す属性があるようですね。
それを使わずに、俺々エンコード・デコードを組んでしまった(しかも 'Null' という簡単な文字列をキーワードにして)ということなんでしょうかね。
Re: (スコア:0)
> 文字列の 'Null' を、比較処理において NULL 値に暗黙に変換
確かに処理自体は違うのですが、これはインジェクション系の場合でも、
問題点としては同様とみなせると思います。
minet氏は理解しておられるのでいいのですが、
これを処理系のバグだと理解していない人もいるようなので、
話が噛み合なくなっているようです。
#単なるバグなので通常はありえない
#PG設計が悪いのは論外 (自殺願望があるのなら止めはしない)