2012-05-14 2 views
0

Visual Studio에서 VB를 사용하여 사용자 정의 로그인 페이지를 만들고 있습니다. 그러나 로그인 할 때마다 다음 오류가 표시됩니다. " '.'근처에 구문이 잘못되었습니다." 나는 잘못된 사용자 이름/암호 콤보가이 인식하지만, 잘 될 때이 오류가 발생하고 로그인에 실패하여 SQL의이 부분에서VB 사용자 정의 로그인 페이지. '.'근처의 구문이 잘못되었습니다.

 Private Function VerifyLogin(ByVal UserName As String) As Boolean 
    Try 
     Dim cnn As New Data.SqlClient.SqlConnection 
     cnn.ConnectionString = My.MySettings.Default.RedwoodConnectionString.Replace(";Integrated Security=True", ";Integrated Security=False") & UserSetting 
     Dim cmd As New Data.SqlClient.SqlCommand 
     cmd.Connection = cnn 
     cmd.CommandType = CommandType.Text 
     cmd.CommandText = "SELECT COUNT (principal_id) FROM _ sys.database_principals WHERE(name = '" & UserName & "')" 
     cnn.Open() 
     Dim i As Integer 
     i = cmd.ExecuteScalar() 
     cnn.Close() 
     If (i > 0) Then Return True 
     Return False 
    Catch ex As Exception 
     System.Windows.Forms.MessageBox.Show("Error: " & ex.Message & vbNewLine & "Location: VerifyLogin() in Login.vb" & vbNewLine & "Returned value: False") 
     Return False 
    End Try 
End Function 
+2

데이터베이스 쿼리는 SQL 주입 공격에 취약합니다. –

답변

2

찾는 넣을 때 :.

FROM _ sys.database_principals

실수를 참조하십시오. _은 전체 테이블 이름이고 sys은 별칭이라고 생각합니다. 이 시점에서 .database_principals은 더 이상 유효하지 않으므로 오류가 발생합니다.

그리고 우리가 여기있는 동안 은 SQL 인젝션 취약점을 수정해야합니다 !!

+0

와우 감사합니다! 나는 그것을 보지 못했다고 나는 믿을 수 없다. 때때로 우리 모두는 그 순간을 가졌습니다! 이것은 데이터베이스 클래스에 대한 클래스의 연습이며 아직 SQL 주입 취약점이 무엇인지 알지 못했습니다. P. 나는 그것을 읽어야 할 것이다. 그러나 이것은 가짜 회사를위한 것이므로 위험에 처한 실제 데이터는 적어도있다. 다시 한번 감사드립니다! – Candace

관련 문제