- - PR -
ASP.NETにおけるXSS、SQLインジェクション対策
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-08 21:06
Where句ではエラーになります。 ごく一部ですが、画面からの入力値をWhere句に使用してる所が有るので、対策は必要だと認識した所です。 DatatSetにセットしUpdateする分にはエラーとはなりません。 ここでも対策が必要なのか、今悩んでる所です。 | ||||||||
|
投稿日時: 2006-02-08 21:13
入力値をWhere句に使用している所では[']のみエラーとなります。 その他の文字はエラーになりません。 また、入力値を更新しているものは全てエラーになりません。 「myrow(列名)=画面で入力した値」 | ||||||||
|
投稿日時: 2006-02-08 21:15
失礼しました。読み間違っていました。
ブログに書いているように、「使われるところで特殊な文字はないか、調査する」必要があります。DataSet では特殊な文字がない、それだけのことです。 ただし、DataTable.Select などを使うときには、特殊文字があります。これも、「特殊機能を回避する方法を調べ」、そのように実装します。要は、「使うときに対応する」です。がるの健忘録も読んでみてください。 | ||||||||
|
投稿日時: 2006-02-08 21:22
えーと "where str_row2 like '" & str & "%" みたいなSQLがあったら [%],[_] は期待しない値をかえしそうですよね "where num_row1 = " & num & " みたいなSQLがあったとしたら [;],[/] もへんな結果を出しそうですよね とくに数字の検索のため ['] で囲っていなかったりした場合は はいろんな SQL が試せそうですよね
書き方が悪かったかな・・・ SQLの文字列とみなされる文字列を受け取ったら 入力をエラーとしますか? それともその値で 検索 or 更新 を行いますか? | ||||||||
|
投稿日時: 2006-02-08 21:30
失礼しました。 エラーとするか値で検索Or更新するかは、自分一人では判断できないので今後検討する事になると思いますが、個人的には入力した値で検索Or更新が出来れば良いですね。 | ||||||||
|
投稿日時: 2006-02-08 21:59
SQL injection に関しては、Web アプリケーションだから、という問題ではありません。Windows アプリケーションでも発生します。
ただ、「使う人」と「ダメージを受ける人」が、ほぼ同じだから問題になりにくいだけです。私がこの問題に気づかされたのは、10数年前、Windows アプリケーションを作っていたときです。 で、イントラネットで使用と限定されているなら、とりあえず運用で逃げてもらうようにするのも、一つ。。。 | ||||||||
|
投稿日時: 2006-02-08 22:17
だとしたら、SqlParameterを使用したほうが楽な気がする [']を検索したい場合次のように変わります。
SqlParameter を使用する場合 ['] をパラメータに入れれば検索できます。 後者の場合 value という変数には ['] を [''] に置き換えて検索しなければなりません。 | ||||||||
|
投稿日時: 2006-02-08 22:30
ん〜なるほど。SELECTに関してはSqlParameterの方向で考える事にします。 UPDATEとDELETEはどうなるのでしょう? 何度も同じことを言って恐縮ですが、DateSetでのUPDATEも対策が必要なのか迷ってます。 |