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

価格.com、サービス再開へ」記事へのコメント

  • by Anonymous Coward
    SQL注入されちゃうのはプログラムの欠陥だろー>asahi.comの記事
    • 本当にクラックの方法が記事どおりだとしてら、

       これまでのサイト攻撃は、OSの不備やホームページをネットに提供するプログラムのミスなどを突くケースが多かった。今回は、プログラムに欠陥がなくても、コンピューターが正規の命令か悪意のある命令かは判断できない点を突き、命令をそのまま実行させて支配下に置いていた。

      • by jbeef (1278) on 2005年05月24日 23時22分 (#740229) 日記
        入力された値のバリデーションを正しく行うことは、Secureプログラミングの基本だと思うのだが、、、
        違いますよ。セキュアプログラミングの本当の基本は、入力の値がどうこうというよりも、出力部分、つまり値を使用する部分(SQLならSQL文を文字列連結して作成する部分)で、メタ文字をエスケープすること(ないし制限チェックをすること(たとえば変数をパス名として使用する部分では、使用するところで所定のディレクトリ内かをチェックする。けっして入力値のチェックではない。))です。

        どういうわけか、入力をサニタイズするという場当たりな対処方法ばかりを宣伝するおかしなセキュリティ屋が多いですが、彼らはプログラミングの素人なんでしょう。ちっちゃいおもちゃCGIプログラムくらいしか作ったことがないとか。

        その場にある脆弱なプログラムを取り急ぎ直すのに入力のサニタイズという方法が即効性がある場合もあるのでしょうが、どのように使われるかわからない入力値をどうやって完全にサニタイズするんでしょうか。サニタイズ漏れや、過剰なサニタイズでバグを生んだりしかねないでしょう。

        セキュアプログラミングの文脈で「サニタイズ」とかいう言葉を持ち出すセキュリティ屋は信用するな、とまで言ってもいいかもしれない。文脈通りに正しい文字列連結のプログラミングをしていれば、この種の脆弱性は最初から生じないのです。

        親コメント
        • by ruto (17678) on 2005年05月24日 23時38分 (#740237) 日記
          それをサニタイズと言うのだと思っていました。
          後学のために正しくはサニタイズとはどういう処理か詳しく教えてください。
          親コメント
          • 無毒化というくらいですからね。普通に当たり前に書いているコードをわざわざ無毒化と呼ぶのは変では?
            • 「無害にする」って訳す翻訳サイトもあるが、エキサイトのテキスト翻訳では「sanitize => 殺菌してください。」と訳したね。

              英語を使う人間がサニタイズと使うからって、そのまま使うケースがあまりに多過ぎる気がするな。
              あっちの人間って、新しい単語を作っても、辞書に載っていなければ通じないから、既存の単語を良く用いる。
              それと違い漢字って、漢字自体が意味を持つから、「無害にする」とか「殺菌する」なんて言葉の英語を外来語として使わずに、「特殊文字の無害化」って多くの人が見ても分かり易く表現した方が良いんじゃないの?
              「特殊文字をサニタイズしていないから」みたいな「対象」がはっきり分かる表現ならば分かりやすいけど。

              CGIのソースを指差し「サニタイズして」なんて言っていると、言われた人はモニターをイソプロピルアルコール等で消毒....
              その後、「サニタイズしてくれた?」なんて聞くと「ちゃんとしておきましたよ」なんて....
              後日、「しかし結果として“最高の対策”とは呼べない部分はあったと思う」
              http://www.itmedia.co.jp/news/articles/0505/25/news086.html
              なんていう羽目になるかも。

              # だけど「無過失らしい」....
              親コメント
        • by pivo (27159) on 2005年05月24日 23時53分 (#740243) 日記
          その通りですね。面目ない。
          ご指摘ありがとうございます。本当に言葉の意味を理解して使っているのかと、自分で反省中です。
          親コメント
        • by zumapon (9208) on 2005年05月25日 1時16分 (#740288)
          外部からの入力:出力が1:nの関係になることを考えると

          1. 出力箇所での対処漏れの予防

          2. 処理回数削減による効率向上

          という考えもアリではないですか?
          なのでシステムの規模や処理内容などで使い分ければ良いんでないでしょうか。
          もちろん、出力時の対処の方がシステムの拡張性は高いと思いますが。

          どちらにしても「設計」「規約による縛り」「試験」は大切ですね。
          親コメント
        • 「サニタイズ」というのはそんなめんどうな言葉でもなくて、存在しちゃまずいキャラクタや文字列を置換するなり削るなりするだけのことですよね?
          そういう意味ではおっしゃるようなメタ文字のエスケープやディレクトリのチェックを(どの時点でやろうとも)サニタイズと呼んでいいような気がします。言い方の問題かな、と。

          しかし、確かにユーザーからの入力値チェックで済ませるというのは場あたり的かもしれないですね。その後どう使われるかがはっきりしてる小さいプログラムしか書かないので、ちょっと気付きませんでした。
          それでも単純に「入力値」とか「入って来た値」とか言ったとき、プログラムに入って来た(main()に入って来た?)値なのか、その関数に入って来た値なのかは状況いかんな気もします。関数に入って来た値を利用する前にエスケープ処理などをやらせる関数を、sanitize()とか名付けたり、「入って来た値は使う前にサニタイズしないとね」みたいな言い方はよくします。やはり言い方、名付け方の問題?

          名前がついているのは便利 [rubycolor.org]ですしね。
          親コメント
        • Yahoo! Blog が入力値をサニタイズしまくって記事投稿時にエラーばっかり吐きまくりやがるので (不正な文字列がどうたらこうたらとか。。。んで、書いた記事全文がフイになる。ブラウザの機能で戻ってもスッカラカンになっちゃうの)、一部ユーザーに反感買いまくりだったりするわけですが、やっぱり彼らもシロートなんだろうなぁ。。。

          。。。ん? /. のコメント欄でもそんなエラーに出くわした記憶が。。。??

          --
          むらちより/あい/をこめて。
          親コメント
        • > どのように使われるかわからない入力値をどうやって完全にサニタイズするんでしょうか。

           セキュリティとは違うのかもしれませんが、データを入力するユーザーが間違える可能性を考慮しないというのはまずいのではないでしょうか。たとえば電話番号の入力を要求しているのにアルファベットが来たら、チェックして正しいデータを入れてもらうようにしないと。

           しかし、電話番号を入れるときにハイフンを使うな、というwebをよく見かけるけど、10桁の数字って確認しにくいんだよなあ。ハイフンくらいプログラムの内部で処理してくれればいいのに。
          --
          ---- 6809
          親コメント
        • いや、そりゃ単なる言葉尻を捉えた揚げ足取りでは?
          ふつーに考えればエスケープ処理はあんたのおっしゃる「出力」の際にやるわけで、サニタイズったらまずそのことでしょう。そうじゃなきゃその出力を行うコード部分を他に転用したときに危ない。
          従って「入力をサニタイズしなさい」というときに、馬鹿正直に値をGetしたコード部分で「サニタイズ」をやるやつぁいないと思いますよ。
          なにしろご指摘のように、出力がSQLなのかHTMLなの
          • by jbeef (1278) on 2005年05月25日 3時30分 (#740331) 日記
            たとえば、バッファオーバーフローの穴が生じないように配列のインデックス確認をするコードを書いたときに、それを「サニタイズした」とは言いませんね。

            #740324 さんの書くサニタイジングのコードというのは、どんな文なんでしょうか? サニタイズというくらいですから、文字列を削るコードなんですよね。
            親コメント
            • #740324のACです。例えが例えになってないような気がするなあ。
              単にサニタイズ用の文字列処理かますだけの話でしょう。難しそうに考える必要はない。
              例えばPHPでXSSを防ぐためにHTML出力を実体参照にしたければ、htmlentities()とかの類の脳死レベルの関数が用意されてますな。
              まあそんなもの用意されてなくても、出力先に応じてエス
            • SQL injectionの対策って、ふつーにsanitizeって言いませんか?

              ぐぐる様での検索結果 [google.co.jp]

              いやまあ、みんな間違って使ってるっておっしゃるのかもしれませんけど……。
              • #740417です。

                私もそう思ってますが。

                サニタイズ=入力の無毒化、チェック。

                入力、出力時に文字列の値をチェック、編集することでsqlインジェクション、コマンドインジェクション、XSS等の対策を行う方法および行為。

                と思ってたんですが。。
                違うんですか?エロイ人。
              • 偉くないけどエロイ人です。

                それでいいんじゃない?
                入力は大抵の場合何か別のものへの出力になるし、出力も大抵の場合何か別のものへの入力になる。
                もちろんカタチを変えたりはするけど。
                「何からの」「何への」を省略してやれ入力だ出力だ言っても仕方あるまいに、と思う。
          • んにゃ。サニタイジングは普通入出力両方でやるぞ。

            出力って、どの部分をさしていってます?
            もし、画面および帳票をさして行ってるならアウト。
            SQLに変数を与えるところを指してるならok。

            動的SQLのすべてがPrepareで書ければいいが、でない場合文字列に

            ;DELE
        • どういうわけか、言葉尻で素人判定するという場当たりな対処方法ばかりを宣伝するおかしなセキュリティ屋が多いですが、彼らはコンサルティングの素人なんでしょう。外野からいちゃもん付けるばかりで、実際に大規模なシステムを作ったことがないとか。

犯人はmoriwaka -- Anonymous Coward

処理中...