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

プレステ2の自由利用を可能にするバッファオーバフロー」記事へのコメント

  • 質問形式でお送りします (スコア:3, おもしろおかしい)

    by Anonymous Coward
    Q.なぜバッフアーオーバーフローがおこるのですか
    A.不定長のデーターに対して下のようなコードを書くからです。
    void func()
    {

    char buf[BUFSIZE];
    .
    .
    .

    }
    Q.何年も前からわかっていながら、なぜ対処しないのですか。
    A.このようなコードを書いてある本が存在するからという説と
    わざと入れているという説があります。
    Q.信じられません。自分のプログラムに穴をあけるなんて。
    A.一部のプログラマーは、これを指摘すると「仕様です」というので
    間違いありません。意図的にやっているのです。
    Q.彼らの目的は何なのです

    • by Anonymous Coward
      反論:
      このQAは表面しか見ていません。BUFSIZEを定義していることが、バッファーオーバーフローに直結するわけではありません。
      問題はBUFSIZEを限界チェックをしていなことです。限界チェックをしないのなら、#defineする必要もないはずです。
      BUFSIZEという形式だけを見て、その目的まで覚えなかった、学習者のミスです。
      • by Anonymous Coward on 2003年08月17日 21時14分 (#380474)
        Q.ネタにマジレスされてますがどうしましょう。
        A.サイズをチェックするのは、みんな気がついている思います。問題はその後です
        Q.scanfを使うなとか fgets(buf,BUFSIZE,fp)ですか
        A.それほど簡単な問題ではありません。bufに収まらなかった時の処理が必要です。
        Q.それはどんなものがありますか
        A.
          1.切り捨てる
          2.さらに大きなバッフアーを確保する
          3.ループで順次処理する
        1の切り捨てるのは乱暴なようですが、背に腹は代えられません。
        2の方法はmallocを使って確保したバッフアーならreallocできます。
        3の方法はプログラムがかなり複雑になります。本質ではない部分に多くの力を注がねばなりません。
        Q.1はかっこ悪いし2は使えないし3は大変です。ほかに方法はありませんか
        A.気づかなかったふりをして、チェックしないという方法をとる人もいます。
        Q.最低ですね
        A.世渡り上手と言ってください
        親コメント
        • ネタにマジレスしたACです。
          ネタにマジレスするのは、礼儀です。

          Q.ではどうしたらいいんでしょう?
          A.パフォーマンスが落ちるからという理由で、たまたま知っているルーチンで処理をおこなうのがいけないのです。じっくり読み込んでいけば、バッファーオ
          • Q.ダブルバッフアーってなんですか
            A.たとえば最初の例だとbuf[2][BUFSIZE]というようにバッフアーを二つとります。
            そして、データを奇数バッフアー、偶数バッフアーの交互に読み取ります。
            Q.なぜそんな面倒なことをするのですが
            A.BUFSIZEで切断されたデーターの前後をみたいからです。たとえば2バイト文字コードのとか。分断されたキーワードとかです。圧縮されたデーターなどでは11bitとかの半端なビット長がまたがっていることもあります。
            Q.文字列処理ばりばりのコンパイラならいざしらず、滅多にないようなデーターに対して、おおがかりすぎませんか。
            A.そ
            • >Q.組み込み機器にはそんなもの走りませんが
              >A.なら、BUFSIZEを超えたデーターは捨てましょう。たいしたものではないんでしょう

              こういういいかげんな対応がバッファオーバーフローの元だという事に、たいがいで気付きましょう。
              バッファから溢れた部分を切り捨てる場合でも、内部の処理によっては不正なコードの実行を許す温床と成り得ます。

              • by Anonymous Coward on 2003年08月18日 19時17分 (#380773)
                捨てるというのは、それほど悪い対処方法ではないです。

                たとえば組み込み機器で考えると、携帯PDA端末なんかであれば以下のような攻撃が予想されます

                1.ping of deathのような場合
                 巨大なパケットを意図して送ってきてますから返事を返さなくていいです。
                2.mp3プレイヤーなどで曲名に異様に長い曲名が入っている場合。
                 十分な長さが確保できていれば、曲名が途中で切れていても文句は出ないでしょう。
                3.WEBブラウザーでhttpヘッダーがとんでもなく長い場合
                 捨てたデーターの中に大事なものがあるかもしれません。
                プログラムを中断して「このページは表示できません」というエラーを出すべきでしょう。

                必死にがんばって何が何でも処理することがよいこととは限らないです。
                要は「たとえ死んでも悪の手先にはならない。」ということでは。
                親コメント
              • 溢れたら捨てるタイプの処理でよく見かける例を、タイトルに実例として挙げておきました。
                ・・・切れなかったらどうしよう・・・

                ↓切られる前のタイトル
                Re:質問形式でお送りします(溢れたら捨ててしまいましょうよ。どうせたいした物じゃないんだし

                明示的に「溢れたら捨てる」のはいい加減でも何でもないですよ。
              • #380737のACですが、何かカン違いなコメントが付いてるみたいなので補足しておく。

                「バッファが溢れる」という事象が確認できるのは、実際にデータを取って来てたり、データをコピーするというかなり下位の部分でしょ。
                だけど、その対応はもっと上位の部分でたとえばセッション丸ごと捨てるとか、

              • ずるいなあ。(笑)
              • >溢れたら捨てるタイプの処理でよく見かける例を、タイトルに実例として挙げておきました。

                失敗したようですね。
                って言うかもうバグ治った?
                Slashcodeはサブジェクトが長すぎる場合、「溢れたら捨てる」という方法を無思慮に行っているの

            • by Anonymous Coward
              ダブルバッファーにしとけば、莫迦でも読み取り長さ指定して、バッファー切り替えしとくだろ。ダブルバッファーで読み取り長さ指定しないようなのは、莫迦以前だ。病気だ。

              # とACに対するマイナスモデが無効な例を出してみる

アレゲはアレゲを呼ぶ -- ある傍観者

処理中...