投稿者 社会人  (社会人) 投稿日時 2014/6/5 17:45:45
>るきおさん
情報有難うございます。
FmLoginの説明が抜けていたので此方に記載します。失礼しました。
・Textbox1はユーザーID、TextBox2はパスワードの入力箇所
・btnGoはコードの実行。btnQuitは画面を閉じる事でプログラムを終了させる。

という仕組みになっています。

教えて貰った情報を元にコードを修正しましたが、上手く機能しません。
何処を訂正すれば宜しいでしょうか?

▼実行後に「入力文字列の形式が正しくありません」と表示された後に「ID,パスワードが一致しません」と表示▼

Imports System.Data.SqlClient

Public Class FmLogin
    Public Shared Property UserID As String
    Public Shared Property UserName As String
    Const ConnectString As String = "Data Source=user;Initial Catalog=データベースシステム;Integrated Security=True"

    Private Sub btnGo_Click(sender As System.Object, e As System.EventArgs) Handles btnGo.Click

        If CheckUser(TextBox1.Text.Trim, TextBox2.Text.Trim) Then
            Me.Hide()
            Dim Main As New fmmain
            Main.Label1.Text = FmLogin.UserName
            Main.ShowDialog(Me)
            Me.Show()
            Me.Close()
        Else
            MsgBox("ID,パスワードが一致しません")
        End If
    End Sub

    Private Function CheckUser(id As String, pass As StringAs Boolean
        Dim RESULT As String = 0

        Dim SQL As String = "SELECT ユーザー名 FROM T確定ユーザー情報" _
                            & " WHERE ユーザーID='" & id & "' AND パスワード='" & pass & "'"

        If RESULT IsNot Nothing Then
            FmLogin.UserID = id
            FmLogin.UserName = RESULT
        End If

        Using conn As New SqlConnection(ConnectString)
            Dim CMD As New SqlCommand(SQL, conn)
            Try
                conn.Open()
                RESULT = Convert.ToInt32(CMD.ExecuteScalar())
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Using

        Return RESULT <> 0
    End Function

    Private Sub btnQuit_Click(sender As System.Object, e As System.EventArgs) Handles btnQuit.Click
        Me.Close()
    End Sub
End Class


▼実行前に※印の箇所で青い波線の「エラー 'IsNot' には参照型を持つオペランドが必要ですが、このオペランドの値型は 'Integer' です。」が発生▼
Imports System.Data.SqlClient

Public Class FmLogin
    Public Shared Property UserID As String
    Public Shared Property UserName As String
    Const ConnectString As String = "Data Source=user;Initial Catalog=データベースシステム;Integrated Security=True"

    Private Sub btnGo_Click(sender As System.Object, e As System.EventArgs) Handles btnGo.Click

        If CheckUser(TextBox1.Text.Trim, TextBox2.Text.Trim) Then
            Me.Hide()
            Dim Main As New fmmain
            Main.Label1.Text = FmLogin.UserName
            Main.ShowDialog(Me)
            Me.Show()
            Me.Close()
        Else
            MsgBox("ID,パスワードが一致しません")
        End If
    End Sub

    Private Function CheckUser(id As String, pass As StringAs Boolean
        Dim RESULT As Integer = 0

        Dim SQL As String = "SELECT ユーザー名 FROM T確定ユーザー情報" _
                            & " WHERE ユーザーID='" & id & "' AND パスワード='" & pass & "'"

        If ※RESULT※ IsNot Nothing Then
            FmLogin.UserID = id
            FmLogin.UserName = RESULT
        End If

        Using conn As New SqlConnection(ConnectString)
            Dim CMD As New SqlCommand(SQL, conn)
            Try
                conn.Open()
                RESULT = Convert.ToInt32(CMD.ExecuteScalar())
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Using

        Return RESULT <> 0
    End Function

    Private Sub btnQuit_Click(sender As System.Object, e As System.EventArgs) Handles btnQuit.Click
        Me.Close()
    End Sub
End Class


>SQLインジェクションの脆弱性
Textbox1(ユーザーID)に「AND 1 = 1 --」と「OR 1 = 1 --」を両方入力後に登録しているTextbox2(パスワード)を入力させましたが、両方ログインに失敗しています。