除非重新启动应用程序,否则为什么不反映密码更改?

时间:2015-09-15 08:37:35

标签: sql vb.net winforms ms-access

我有两种形式;一个用于登录,另一个用于更改密码。我使用Microsoft Access数据库作为后端。我使用查询构建器创建了登录表单。

密码被更改,但是当我尝试使用新密码登录时,它会拒绝密码。如果我关闭应用程序并重新打开它,新密码将起作用。 我希望它能够立即更新,以便我可以使用更新的密码,而无需关闭应用程序。

这是更改密码的代码:

    Dim conn As New OleDb.OleDbConnection
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Bus ticketing-5th sem\WindowsApplication3\bus.mdb"
    Try
        Dim cmd As New OleDbCommand("select [PASSWORD] from login where USERNAME=? ", conn)
        If conn.State = ConnectionState.Open Then conn.Close()
        conn.Open()
        Dim i As Integer
        i = MsgBox("Are You Sure Update Selected Record ?", MsgBoxStyle.OkCancel)
        If (txtnpass.Text <> txtconpass.Text) Then
            MsgBox("Password mismatching")
        Else
            cmd.CommandText = "UPDATE login SET [PASSWORD]='" & txtnpass.Text & "' WHERE [USERNAME]='" & txtusername.Text & "'"
            cmd.ExecuteNonQuery()
            ''Call busDataSet()
            Call Reset()
            MsgBox("Record Updated Successfully", MsgBoxStyle.Information)
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

这是使用查询构建器的登录表单的代码:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim login1 = LoginTableAdapter.UserPasswordString(USERNAMETextBox.Text, PASSWORDTextBox.Text)
        If login1 Is Nothing Then
            MessageBox.Show(" CHECK USERNAME OR PASSWORD ", "Authentication Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MsgBox(" WELCOME ADMIN! ", MsgBoxStyle.Information, " SUCCESSFULLY LOGGED IN ")
            Form9.Show()
            Me.Hide()
        End If
    End Sub

1 个答案:

答案 0 :(得分:0)

这里的问题是您没有重置表单,这意味着PASSWORDTextBox&amp; USERNAMETextBox 可怕的 变量命名方案,顺便说一下!)是相同的&amp;因此,LoginTableAdapter.UserPasswordString包含与之前相同的变量(即重置之前使用的密码)。

要解决此问题,您需要使用[formName].Refresh()刷新登录表单,以便清除任何“缓存”状态。存储在表单中的登录详细信息等数据。如果您还没有,那么您也应该清除用户名&amp;加载或取消隐藏登录表单时的密码字段(又称OnLoad&amp; Close事件)。

另一个问题是您没有保护您的密码,而是以明文形式发送和存储在数据库中。 现在,这种方法存在两个问题:

  • 有权访问数据库的攻击者可以任何用户身份登录,因为他们可以查看密码
  • 其他用户可能会利用此

您需要使用算法(I recommend SHAMD5 can be used but is not recommended哈希您的密码。您也应该是sanitizing the inputs that are sent to the database,因为攻击者可以使用无辜的TextBox轻松销毁数据库中保存的所有数据。这叫做SQL注入&#39;并且非常讨厌。

散列的工作方式是在数据库中存储密码的散列版本,然后程序在密码TextBox中创建密码的散列,&amp;将它与数据库中保存的数据进行比较。如果哈希值匹配,则密码匹配。哈希只是单向的;它们无法解密。

不保护带有哈希值的密码可能会破坏数据保护法,因此如果您最终走下 not 散列密码的危险路径,请务必小心。