水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > SQLコマンドインジェクション自爆 > 「SQLコマンドインジェクション自爆」へのコメント

「SQLコマンドインジェクション自爆」へのコメント

[1461] Re: えび日記 : 「SQLコマンドインジェクション自爆」

y-Aki (2004年1月9日 9時17分)

JavaでいうPreparedStatementみたいなのはないんですかねぇ。

http://msdn.microsoft.com/library/default.asp?

url=/library/en-us/cpguide/html/cpconsecureadonetcodingguidelines.asp

より

Dim selectString As String = "SELECT * FROM Customers WHERE CustomerID = @CustomerID"

Dim cmd As SqlCommand = New SqlCommand(selectString, conn)

cmd.Parameters.Add("@CustomerID", SqlDbType.VarChar, 5).Value = custID

VBで、しかも、DataTable使ってませんが…^^;

[1462] Re: えび日記 : 「SQLコマンドインジェクション自爆」

asa (2004年1月9日 10時15分)

>Dim selectString As String = "SELECT * FROM Customers WHERE CustomerID = @CustomerID"

>

>Dim cmd As SqlCommand = New SqlCommand(selectString, conn)

>cmd.Parameters.Add("@CustomerID", SqlDbType.VarChar, 5).Value = custID

>

上記のようなparameterで私は回避してます。シングルコーテーションがそのまま登録できるのでINSERTなどはさらに楽です。

[1463] Re: えび日記 : 「SQLコマンドインジェクション自爆」

えむけい (2004年1月9日 12時10分)

ようするに【謎】HTMLの「DOMを使う」に相当する解決策があることを分かればよろしい【謎】。

[1464] Re: えび日記 : 「SQLコマンドインジェクション自爆」

えむけい (2004年1月9日 12時21分)

>ようするに【謎】HTMLの「DOMを使う」に相当する解決策があることを分かればよろしい【謎】。

http://www.ipa.go.jp/security/awareness/vendor/programming/a02_01.html

スターダストさん【誰】もベタほめのIPAのサイトにも「バインドを使え」と思いっきり書かれてますね。

[1465] Re: えび日記 : 「SQLコマンドインジェクション自爆」

ばけら (2004年1月9日 13時44分)

 うーん、しかし真性の SQL サーバではなくて、XML から読んだデータをメモリ上で DataTable に格納してるだけなんですよね。

 で、DataTable の Select メソッドには string しか渡せないですし、バインドっぽいものがなさそうな感じなのですが……。

[1467] Re: えび日記 : 「SQLコマンドインジェクション自爆」

岩本隆史 (2004年1月10日 0時59分)

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatadatatableclassselecttopic2.asp

の解説に「引数 filterExpression を作成するには、フィルタを作成するときに DataColumn クラスの Expression プロパティの値に適用する規則と同じ規則を使用します」とあります。

見当外れでしたら申し訳ありません。

[1469] Re: えび日記 : 「SQLコマンドインジェクション自爆」

ばけら (2004年1月13日 10時24分)

 見当外れどころかまさにそれなのですが、そこに出てる文字全部ひとつずつエスケープしなきゃならんのかいな、という感じでして……。

[1470] Re: えび日記 : 「SQLコマンドインジェクション自爆」

岩本隆史 (2004年1月13日 12時56分)

> 見当外れどころかまさにそれなのですが、そこに出てる文字全部ひとつずつエスケープしなきゃならんのかいな、という感じでして……。

その意味でルート記事を書かれたのですね。失礼いたしました。

列名のサニタイズが必要な場合、

  1. 「]」を「\]」に置換

  2. 全体を「[」と「]」で囲む

で終りではないでしょうか。

「ユーザー定義の値(文字列値)」であれば、

  1. 「'」を「''」に置換

  2. 全体を「'」と「'」で囲む

と。

[1473] Re: えび日記 : 「SQLコマンドインジェクション自爆」

ばけら (2004年1月13日 14時2分)

>「ユーザー定義の値(文字列値)」であれば、

>  1. 「'」を「''」に置換

>  2. 全体を「'」と「'」で囲む

>と。

 LIKE を使わない場合は * や % や [] は処理しなくて良いのでしょうか。その辺がイマイチ謎ですが……。

 まあ色々試してみますか。

[3807] 未承認メッセージ (投稿元:85.114.178.83)

ufgzrt hbfrclv (2006年8月19日 11時29分)

(この記事は承認されていないため、管理者が許可するまで公開されません。)

[3808] 未承認メッセージ (投稿元:220.88.111.89)

zcdksnwh nvfsohupy (2006年8月19日 11時29分)

(この記事は承認されていないため、管理者が許可するまで公開されません。)

新規投稿フォーム

※広告や宣伝の書き込みはご遠慮ください。

:

:

:

最近の日記

関わった本など