SQLインジェクション対策

カテゴリ: VB.NET
投稿日時:2008/12/21 13:56:50
ユーザにテキストボックス等で入力させた値を、SQLに使用する際には、SQLインジェクション対策が必要になります。
クエリ文字列に関してもユーザが手入力する可能性があるので、対策が必要です。

①SqlParameterを使用する


SqlParameterを使用することで、SQLインジェクション攻撃を防ぐことができます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim cn As New SqlConnection()

    cn.Open()

    Dim sql As String = "SELECT * FROM TABLENAME WHERE UserID=@id"

    Dim cmd As New SqlCommand(sql, cn)

    cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = Me.TextBox1.Text

    Dim adapter As New SqlDataAdapter(cmd)

    Dim ds As New DataSet
    adapter.Fill(ds)

    MessageBox.Show(ds.Tables(0).Rows(0)(0))

End Sub


②サニタイジングする


入力値の'(シングルクォーテーション)を''(シングルクォーテーション2つ)にします。
入力値の(セミコロン)を削除します。

''' <summary>
''' SQLをサニタイジングする。
''' </summary>
''' <param name="value"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function SanitizeSQL(ByVal value As String) As String

    Dim ret As String = value.Replace("'", "''")

    ret = ret.Replace("", "")

    Return ret
End Function


入力値をSQLに組み込む際にサニタイジングします。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim cn As New SqlConnection()

    cn.Open()

    Dim sql As String = "SELECT * FROM TABLENAME WHERE UserID='" & SanitizeSQL(Me.TextBox1.Text) & "'"

    Dim adapter As New SqlDataAdapter(sql, cn)

    Dim ds As New DataSet

    adapter.Fill(ds)

    MessageBox.Show(ds.Tables(0).Rows(0)(0))
End Sub
このエントリーをはてなブックマークに追加

スポンサード リンク