- PR -

ASP.NETにおけるXSS、SQLインジェクション対策

投稿者投稿内容
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-02-09 10:24
引用:

パラメタライズドの知識があまり無く、実装しようと考えてましたが。データアダプタを使用した場合、パラメタライズドには出来ないと言う事なのでしょうか?


パラメタライズドクエリは「データベース」に対する問合せに使います。「DataSetやDataTab le」に対する問合せには使えません。

ま、Jitta さんも仰っているようにイントラ限定使用ならば、運用で逃げる事も可能ですね。
_________________
囚人のジレンマな日々
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-09 11:05
引用:

NAL-6295さんの書き込み (2006-02-09 10:20) より:
パラメタライズドクエリにした上で、
その部分については対処するという事になると思います。



はい。
的外れな事を言ってたらごめんなさい。
SELECTに関してはパラメータクエリにしないと駄目だと認識したのですが、更新、削除に関してはデータアダプタのUpdateCommandとDeleteCommandで行うので、それ自体がパラメータクエリになっているなんて事はありませんか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-02-09 11:14
横から何度もすみません。
引用:

SELECTに関してはパラメータクエリにしないと駄目だと認識したのですが、更新、削除に関してはデータアダプタのUpdateCommandとDeleteCommandで行うので、それ自体がパラメータクエリになっているなんて事はありませんか?


UpDataCommand の CommandText を出力してみたらどうなっていますかな?
_________________
囚人のジレンマな日々
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-09 11:27
引用:

囚人さんの書き込み (2006-02-09 11:14) より:
UpDataCommand の CommandText を出力してみたらどうなっていますかな?



簡単に書くと

Me.OracleUpdateCommand53.CommandText = "UPDATE TABLE1 SET CODE = :CODE, MOJI = :MOJI WHERE (CODE = riginal_CODE") AND (MOJI = riginal_MOJI)
Me.OracleUpdateCommand53.Connection = Me.Connection
Me.OracleUpdateCommand53.Parameters.Add(New System.Data.OracleClient.OracleParameter(":CODE", System.Data.OracleClient.OracleType.Number, 0 "CODE"))
Me.OracleUpdateCommand53.Parameters.Add(New System.Data.OracleClient.OracleParameter(":MOJI", System.Data.OracleClient.OracleType.VarChar, 10, "MOJI"))

こんな感じです。
パラメータクエリですよね。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-02-09 11:41
引用:

こんな感じです。
パラメータクエリですよね。


あ、そっちですか。Visual Studio のウィザードが自動で生成したやつですね。
そうです。パラメータクエリです。

_________________
囚人のジレンマな日々
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-09 12:09
ずばり聞いてしまいます。

下記のロジックの場合、どういった修正をすれば良いですか?

Dim con As New OracleConnection
Dim da As New OracleDataAdapter
Dim cmd As OracleCommand
Dim ds As New DataSet
Dim dv As New DataView
Dim myRow As DataRow
Dim SQL As String

SQL = "SELECT * FROM TABLE1 WHERE CODE=" & 変数
con.ConnectionString = 接続文字列
cmd = New OracleCommand(SQL, con)
da.SelectCommand = cmd
da.Fill(ds, "TABLE1")
dv.Table = ds.Tables("TABLE1")
If dv.Count > 0 Then
'該当あり
myRow = dv(0).Row
Else
'該当なしは新規
myRow = dv.Table.NewRow
End If

myRow("MOJI") = 入力値

'更新処理
da.Update(ds)
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-02-09 13:14
ずばり応えてみます。

コード:
SQL = "SELECT * FROM TABLE1 WHERE CODE= :CODE"
con.ConnectionString = 接続文字列 
cmd = New OracleCommand(SQL, con) 
cmd.Parameters.Add(":CODE", OracleType.Number, 0).Value = 変数

da.SelectCommand = cmd 
da.Fill(ds, "TABLE1") 

dv.Table = ds.Tables("TABLE1") 
If dv.Count > 0 Then 
'該当あり 
myRow = dv(0).Row 
Else 
'該当なしは新規 
myRow = dv.Table.NewRow 
End If 

myRow("MOJI") = 何かしたほうがよいか(入力値)

'更新処理 
da.Update(ds)


こんなのかな。
_________________
囚人のジレンマな日々
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-09 13:25
引用:

囚人さんの書き込み (2006-02-09 13:14) より:
ずばり応えてみます。



ありがとうございます。参考になりました。

スキルアップ/キャリアアップ(JOB@IT)