パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

プログラマを悩ます人名:「Null」さん」記事へのコメント

  • by Anonymous Coward

    ステートメントとデータは別扱いなのでは。
    NULLという人名がステートメント扱いされるのなら、
    SQL文やプログラムコードとして解釈可能な建物名とかを住所として登録すると実行するわけだ。
    セキュリティホールそのものですね。

    システムのバグらしいので、通常のシステムであればありえない話です。

    #作者によるバックドアは裏仕様です

    • by minet (45149) on 2013年08月02日 19時10分 (#2433579) 日記

      件の処理系を触ったことがないので全く違うかもしれませんが、
      データを実行してしまうインジェクション系の話ではなくて、
      文字列の 'Null' を、比較処理において NULL 値に暗黙に変換してしまうような、そういうたぐいの型システムの不備ではないでしょうか。

      親コメント
      • by firewheel (31280) on 2013年08月02日 20時04分 (#2433612)

        Wikipedia見ると
        「Adobe FlashはActionScriptというJavaScriptと類似したプログラミング言語を内包しており、~」
        「Adobe Flexはその長所をさらに拡げ、~」
        とか書いてあるから、わりとそんな感じなのかも。

        たとえばPHPの場合だと、まさに「それは仕様です」だろうな。
        PHPだと下手すると標準ライブラリの中でも、そんな暗黙の型変換をやってくれるから、
        完全に潰すのはかなり手間。

        親コメント
      • タレコミに書かれてるとおり、
        > SOAPエンコーダのバグ
        でしょ。
        SOAP とは、一言で言えば「オブジェクトをテキスト(XML)で表現」するためのプロトコル
        言語処理系の問題ではなくライブラリの問題。。

        オブジェクト中の文字列型プロパティをテキスト化(エンコード)するときに、
        ・基本は文字列をそのままテキスト出力、null値の時は「Null」という文字列で出力
        して、テキストからオブジェクトへの読み込み(デコード)側では
        ・基本は読み込んだテキストをそのまま文字列化、「Null」というテキストの時はnull値に
        なんてことをしていたのでしょう。

        文字列Nullをエンコードしてデコードしたらnull値になっちゃう、と。

        親コメント
        • by minet (45149) on 2013年08月04日 14時51分 (#2434380) 日記

          わかりやすい解説ありがとうございます。

          確かに、文字列型の場合は空文字列が想定されるから、XMLでオブジェクトを表現する際、要素が空である場合にNULL値とみなすような実装はできない…、でも属性で示せばいいんじゃない?
          と思って調べてみたところ、やはりSOAPにはちゃんとNULL値を示す属性があるようですね。
          それを使わずに、俺々エンコード・デコードを組んでしまった(しかも 'Null' という簡単な文字列をキーワードにして)ということなんでしょうかね。

          親コメント
      • by Anonymous Coward

        > 文字列の 'Null' を、比較処理において NULL 値に暗黙に変換
        確かに処理自体は違うのですが、これはインジェクション系の場合でも、
        問題点としては同様とみなせると思います。

          minet氏は理解しておられるのでいいのですが、
        これを処理系のバグだと理解していない人もいるようなので、
        話が噛み合なくなっているようです。

        #単なるバグなので通常はありえない
        #PG設計が悪いのは論外 (自殺願望があるのなら止めはしない)

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

処理中...