我有以下代码验证从SQL Server检索的用户ID和密码,但我希望验证密码区分大小写。
Dim frm As New MarksEntryFrm
Dim flag As Boolean
flag = False
cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID='" & cboSubjCode.SelectedItem & "' and b.UserID='" & txtUserName.Text & "' and b.Password='" & txtPassword.Text & "'", cn)
dr1 = cmd.ExecuteReader
ctr = ctr + 1
If dr1.Read Then
frm.Show()
ctr = 0
Me.Hide()
ElseIf ctr < 3 Then
MessageBox.Show("Incorrect Subject Code,User Name or Password. Please try again.", "Wrong data entered", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
Else
MsgBox("Unathorized access. Aborting...")
Close()
End If
dr1.Close()
答案 0 :(得分:4)
你为什么不哈希你的密码????现在是Thats Primitive ......
好Case-sensitivity
由Collation property
表设计器中的SQL Server
列控制。
默认设置不区分大小写。
以下是两种解决方案:
在SQL Server表设计器中,修改“列属性”窗口中“密码”字段的“排序规则”属性,选中“Case Sensitive
”复选框。
首先将数据库中的密码检索到变量中,然后将其与TextBoxPassword.Text
进行比较。
希望这有帮助。
答案 1 :(得分:3)
要字面回答您的问题,您可以将以下内容添加到您的密码比较中:
and b.Password='" & txtPassword.Text & "' collate Latin1_General_CS_AS"
但在进一步讨论之前,请继续阅读SQL注入(以及切换到参数化查询),以及有关人员密码发布的最新新闻报道(以及查找密码哈希)。 / p>
所以,稍微好一点就是:
cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID=@SubjectID and b.UserID=@UserID and b.Password=@Password collate Latin1_General_CS_AS", cn)
cmd.Parameters.AddWithValue("@Subject",txtSubject.Text)
cmd.Parameters.AddWithValue("@UserID",txtUserName.Text)
cmd.Parameters.AddWithValue("@Password",txtPassword.Text)
至少可以保护您免受SQL注入(虽然AddWithValue
并非没有自己的问题)。
答案 2 :(得分:0)
我有以下代码验证从SQL检索的用户ID和密码 服务器,
你被严重忽视起诉。你甚至不应该在sql server中存储一个非散列密码。如果你从sql server中提取te密码哈希,你对标准sql排序规则的cae不敏感性没有任何问题。
你再次被粗暴忽视 - 你永远不应该将未经过处理的用户输入传递给sql字符串。这是现在通过专业标准的常见知识,而不是坚持它们意味着你完全有责任承担损害。
答案 3 :(得分:0)
使用您的SQL
,如下所示:
在这种情况下,您需要使用COLLATE
。
cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID='" & cboSubjCode.SelectedItem & "' and b.UserID='" & txtUserName.Text & "' and b.Password='" & txtPassword.Text & "' COLLATE Latin1_General_BIN ", cn)