2017-03-01 7 views
0

私はvb.netのログインコードに問題があり、誰かが自分のコードに間違っていることを示唆することができるのだろうかと疑問に思っていましたか?VB.NETログインの問題SQL

私は取得していますエラーは次のとおりです。

「System.Data.SqlClient.SqlException」のSystem.Data.dllで発生したが、ユーザーコードで

追加情報を扱っていなかったタイプの例外:データ型textとvarcharは、等しい演算子では互換性がありません。

コード。

Imports System.Data.SqlClient 
Partial Class Login Inherits System.Web.UI.Page 

    Protected Sub btnlogin_Click(sender As Object, e As EventArgs) Handles btnlogin.Click 

     Dim conn As New SqlConnection 
     Dim cmd As New SqlCommand 
     Dim dr As SqlDataReader 

     Dim LogEmail As String 
     Dim LogPassword As String 

     LogEmail = txtLogEmail.Text 
     LogPassword = txtLogPword.Text 

     conn.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Visual Studio 2015\WebSites\myAppointments\App_Data\Database.mdf;Integrated Security=True" 
     cmd.Connection = conn 
     conn.Open() 
     cmd.CommandText = "SELECT EmailAddress, Password FROM PatientDetails WHERE EmailAddress = '" & txtLogEmail.Text & "' and Password = '" & txtLogPword.Text & "'" 
     dr = cmd.ExecuteReader 
     If dr.HasRows Then 
      lblLogin.Text = "Login Successful!" 
     Else 
      lblLogin.Text = "Login Unsuccessful! :(" 
     End If 

     conn.Close() 

    End Sub 

End Class 
+0

これはすぐに起こるのを待っているSQLインジェクションだと思いますか?あなたのクエリをパラメタ化!たぶんプレーンテキストのパスワードはもちろんですが? – VDWWD

+0

そうしてもらえますか? –

+0

[Gooleはあなたの友人です](https://www.google.nl/?gws_rd=ssl#q=parametarized+queries+vb&*) – VDWWD

答えて

0

ほとんどの場合、あなたの[PatientDetails]表でご[EmailAddress]フィールドやあなた[Password]フィールドはタイプtextです。このクエリを使用するには、基礎となるデータ型をvarcharまたはnvarcharに変更する必要があります。

さらに重要なことは、あなたのクエリは、その入力をサニタイズ、エスケープ、またはパラメータ化していないため、SQLインジェクションに対して脆弱であることです。誰かがユーザー名]ボックスで、次を入力した場合を想像:あなたは自分のパスワードをチェックすると、彼らはちょうどティムが言ったことに加えて...

0

をあなたのテーブル全体を削除

';DELETE FROM PatientDetails; -- 

、理由はありませんEmailAddressまたはPasswordフィールドのいずれかがタイプtextになるようにします。両方にはnvarchar(255)を使用するだけで十分です。