2014-03-24 2 views
0

ASP.NET 로그인 양식의 제목에 오류 메시지가 나타납니다. 누구든지 어떻게 정렬 할 수 있는지 알고 있습니까?문자열 ""에서 유형 '부울'로의 변환이 올바르지 않습니다.

Dim isValidLogin = reader.GetValue(1) 

에 : 도움이 많이

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    Dim conn As New MySqlConnection 

    conn.ConnectionString = ("server=localhost;port=3307;user=user;password=password;database=DB;") 

    Try 

    Dim SQL As String = "select * from users3 where uname = '" & txtUName.Text & "' AND password = '" & txtPwd.Text & "'" 

    conn.Open() 

    Dim cmd As New MySqlCommand(SQL, conn) 
    Dim reader As MySqlDataReader = cmd.ExecuteReader 

     reader.Read() 
     Dim isValidLogin As Boolean 
     Boolean.TryParse(reader.GetValue(1), isValidLogin) 

     If isValidLogin Then 
      Session("UserName") = txtUName.Text 
     Response.Redirect("REGISTERPROP.aspx") 
    Else 
     Response.Write("Invalid Login") 
    End If 

    Catch ex As Exception 
    Response.Write("An Error Occurred: " & ex.Message.ToString()) 
    End Try 
End Sub 
+0

가능한 중복 [부울을 입력 할 문자열에서 변환이 유효하지 않습니다 (http://stackoverflow.com/questions/7874049/conversion-from-string-to-type 같은 그런 논리는 간단하게, 뭔가 -boolean-is-not-valid) –

+0

문제가 해결되었습니다. 오류 메시지가 더 이상 나타나지 않아서 "이제 Read()를 호출하기 전에 필드에 액세스하려는 잘못된 시도가 ASP에서 약합니다. 그물과 도움이 많이 감사합니다! – user3457014

+0

이 질문을 답하도록 설정하고 현재 코드를 게시하는 동안 새로운 질문을하십시오. – NotMe

답변

1

변경 감사

Dim isValidLogin As Boolean 
Boolean.TryParse(reader.GetValue(1), isValidLogin) 
+0

감사합니다. 지금이 오류 메시지가 나타납니다. "Read()를 호출하기 전에 필드에 액세스하려는 시도가 잘못되었습니다."아이디어가 있습니까? 도움을 주셔서 감사합니다! – user3457014

+1

여전히 reader.Read()에 대한 호출이 있습니다. 그리고 이것은 여전히 ​​isValidLogin의 선언 이전입니까? –

+0

예 그것이 그렇게 보이는이다 MySqlDataReader = cmd.ExecuteReader로서 어둡게 리더 reader.Read() 어둡게 isValidLogin 부울 Boolean.TryParse (판독기.GetValue (1), isValidLogin) If isValidLogin Then Session ("UserName") = txtUName.Text – user3457014

1

음, 메시지는 거의 자명하다. 빈 (nil) 문자열을 부울로 변환하려고합니다. Boolean의 유효한 문자열 값은 대문자와 소문자를 구분하지 않습니다 (truefalse). 그래도 다른 문제가 있습니다. 사용자/암호가 발견되면

  • 귀하의 질의는 사용자/암호가 발견되지 않으면 0 행 (빈 세트), 그리고 (아마도) 1 개 행을 반환합니다. 그러나 행을 읽으면 true을, false otherwise을 반환하면 Read() 메서드에서 반환 값을 확인하지 않습니다. 쿼리는 일치하는 행만 반환합니다. 데이터를 검색하기 전에 해당 행을 확인해야합니다.

  • 또한 쿼리에는 SQL Injection 취약점이 있습니다. 매개 변수가있는 쿼리 또는 저장 프로 시저 사용을 고려하십시오. 당신이 (또는 단순히 게시물) 누군가가 암호를 필드 페이지에이 다시는 경우 발생할 수있는 생각 : 그것은 나타납니다

    ; drop table users3 ; 
    
  • 당신이 당신의 데이터베이스에 맑은에 암호를 저장하고 있습니다. SQL Injection 취약점과 관련하여 시스템 및 사용자가 침해당하는 것을 방지 할 수 있습니다. SHA-256과 같은 secure hashing algorithm을 사용하여 암호를 해시하고 해시 된 암호를 해시하는 것이 좋습니다.

`select 'true' from user3 where ...` 

에 조회를 변경하고 결과 세트가 비어있는 경우 첫 번째 결과 집합의 행 또는 null의 첫 번째 열을 반환 DbReader.ExecuteScalar()을 사용하여 실행

.

Dim isValidLogin = cmd.ExecuteScalar() 
If isValidLogin IsNot Nothing And isValidLogin Then 
    Session("UserName") = txtUName.Text 
    Response.Redirect("REGISTERPROP.aspx") 
Else 
    Response.Write("Invalid Login") 
End If 
+0

내 코드가 SQL 삽입에 취약하다는 것을 알고 있고 그 후에 참석할 것입니다 ... 내 주요 목표는 이 로그인 양식은 내가 이것을 손으로 가지고 대학에서 내일이고 내가 캔트가 실패 할거야, 내가 asp.net에 약해서 강조하고 있는데, 나는 단순히 일할 양식을 얻을 수 없다. 내 전체 코드가 제대로 작동하는지 확인해 줄 수 있습니까? 당신은 내가 얼마나 위대한 것이 될지 믿지 않을거야! – user3457014

+0

나는 VB.Net 녀석이 아니기 때문에 나는 당신을위한 잘못된 자료가 될 것이다. D –

+0

어쨌든 도움을 주셔서 감사합니다. 그저 저를 우울하게 여기는 것은 지금 코더가 아닙니다. 학년 : ( – user3457014

관련 문제