gpt4 book ai didi

database - 从数据库验证凭据

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:19 25 4
gpt4 key购买 nike

我对我的代码感到困惑:

Dim sqladapter As SqlDataAdapter = New SqlDataAdapter()
Dim sqlcmd As SqlCommand = New SqlCommand()
sqlcmd = New SqlCommand("SELECT login, pass from Table1 where login=" & login.Text & "and pass='" & password.Text.ToString() & "';", connect)
Dim dr As SqlDataReader = sqlcmd.ExecuteReader()
Dim dt As DataTable = New DataTable()
dt.Load(dr)
If (dt.Rows.Count = 1) Then
'Display welcome page or do some action here.

现在,我的问题是,是否有任何其他方法可以执行 Rows.Count==1 。我觉得这是非常错误的,没有任何意义。

你如何从数据库中验证用户在表中除了计数行之外只有一个有效记录。

提前致谢:)

(请在报告问题前询问我)

最佳答案

您有两个问题,一个叫做 Sql Injection 并且您已经有很多链接可以解释为什么真的很糟糕。另一个是存储在数据库中的明文密码。这是一个很大的安全问题,因为每个有可能查看您的数据库的人都可以看到您的用户的密码。 (当然,这个问题的严重性与您的应用程序的性质有关,但不能低估)See this link有关如何对字符串(密码)进行哈希处理并使其加密版本存储在数据库中而不是纯文本的答案。

最后,可以更改您使用的代码以避免 SqlDataAdapterDataTable
只需使用 ExecuteScalar针对 IF EXIST如果用户/密码存在则查询仅返回 1,如果不存在则返回 0

Dim cmdText = "IF EXISTS(SELECT 1 FROM Table1 WHERE login = @log AND pass = @pwd) " & _
"SELECT 1 ELSE SELECT 0"
using connect = new SqlConnection(connectionstring)
using sqlcmd = New SqlCommand(cmdText, connect)
connect.Open()
sqlcmd.Parameters.AddWithValue("@log", login.Text)
sqlcmd.Parameters.AddWithValue("@pwd", password.Text) ' <- Subst with a call to an hash function
Dim exists = Convert.ToInt32(sqlcmd.ExecuteScalar())
if exists = 1 Then
'Display welcome page or do some action
else

end if
End Using
End Using

关于database - 从数据库验证凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com