Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Strcn As String
Strcn = "Driver={MySQL ODBC 3.51 Diver};Server=這是IP;Database=xiaowenwen;Uid=xiaowenwen;PWD=xiaowenwen;Option=3;stmt=Set Names GB2312"
cn.Open Strcn
cn.CursorLocation = adUseClient
rs.Open "User", cn, adOpenKeyset, adLockOptimistic
可是,我想讀取資料表里的UserName和PassWord,這里要怎么寫
rs.Close
cn.Close
rs.Open "select count(*) as X from `User` where `username`='" & text1.Text & "' and `password`='" & text2.Text & "'", cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
登陸失敗
else
登陸成功
end if
代碼的本意是,如果用戶輸入 'Bob' 和 '1234',代碼就得到如下 SQL 陳述句:
SELECT COUNT(*) AS x FROM [User] WHERE username = 'Bob' AND password = '1234'
但是,一個作弊者可以在密碼框中輸入 ' OR '0' = '0,用戶名不必關心,甚至可以不輸入,得到的 SQL 陳述句如下:
SELECT COUNT(*) AS x FROM [User] WHERE username = '' AND password = '' OR '0' = '0'
因為 '0' = '0' 永遠為真,所以查詢一定可以得到記錄。也就是說登錄成功!
安全的做法,是僅針對用戶名查詢其密碼,然后在代碼中對密碼進行比對。
uj5u.com熱心網友回復:
那怎么辦
uj5u.com熱心網友回復:
rs.Open "select count(*) as X from `User` where `username`='" & text1.Text & "' and `password`='" & text2.Text & "'", cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
登陸失敗
else
登陸成功
end if
順便問一下,注冊系統怎么弄
rs.Open "select count(*) as X from `User` where `username`= text1.Text, cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
這是注冊的陳述句
End If
[b這樣可以么?][/b]
uj5u.com熱心網友回復:
rs.Open "select count(*) as X from `User` where `username`='" & text1.Text & "' and `password`='" & text2.Text & "'", cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
登陸失敗
else
登陸成功
end if
順便問一下,注冊系統怎么弄
rs.Open "select count(*) as X from `User` where `username`= text1.Text, cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
這是注冊的陳述句
End If
rs.Open "select count(*) as X from `User` where `username`='" & text1.Text & "' and `password`='" & text2.Text & "'", cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
登陸失敗
else
登陸成功
end if
這是非常不安全的查詢方式。
代碼的本意是,如果用戶輸入 'Bob' 和 '1234',代碼就得到如下 SQL 陳述句:
SELECT COUNT(*) AS x FROM [User] WHERE username = 'Bob' AND password = '1234'
但是,一個作弊者可以在密碼框中輸入 ' OR '0' = '0,用戶名不必關心,甚至可以不輸入,得到的 SQL 陳述句如下:
SELECT COUNT(*) AS x FROM [User] WHERE username = '' AND password = '' OR '0' = '0'
因為 '0' = '0' 永遠為真,所以查詢一定可以得到記錄。也就是說登錄成功!
安全的做法,是僅針對用戶名查詢其密碼,然后在代碼中對密碼進行比對。
那怎么辦
用我的代碼就可以。作為初學者,你不用考慮sql注入的問題,那是比較高級的話題,
uj5u.com熱心網友回復:
rs.Open "select count(*) as X from `User` where `username`='" & text1.Text & "' and `password`='" & text2.Text & "'", cn, adOpenKeyset, adLockOptimistic
if rs!X = 0 then
登陸失敗
else
登陸成功
end if
這是非常不安全的查詢方式。
代碼的本意是,如果用戶輸入 'Bob' 和 '1234',代碼就得到如下 SQL 陳述句:
SELECT COUNT(*) AS x FROM [User] WHERE username = 'Bob' AND password = '1234'
但是,一個作弊者可以在密碼框中輸入 ' OR '0' = '0,用戶名不必關心,甚至可以不輸入,得到的 SQL 陳述句如下:
SELECT COUNT(*) AS x FROM [User] WHERE username = '' AND password = '' OR '0' = '0'
Dim cn As New ADODB.Connection, RS As New ADODB.Recordset
' 注意添加ADO的資料庫連接參考
Private Sub Command1_Click()
’非常標準的系統登錄單擊程序,這種登錄安全性非常好
If Text1.Text = "" Then
MsgBox "你沒有輸入用戶名!", 16, "請輸入!"
Exit Sub
End If
If Text2.Text = "" Then
MsgBox "你沒有輸入用戶密碼!", 16, "請輸入!"
Exit Sub
End If
Call AAA(cn)
RS.Open "Select * from User Where UserName='" & Text1.Text & "'", cn, 2, 2
If RS.EOF = True Then '判斷用戶名對不對
MsgBox "你的用戶名不正確!", 16, "請重新輸入!"
Text1.Text = ""
Text2.Text = ""
Else
If RS!PassWord = Text2.Text Then '判斷密碼是否正確
Form2.Show '登錄成功,進入下一個表單
Else
MsgBox "你的用戶密碼不正確!", 16, "請重新輸入!"
Text2.Text = ""
End If
End If
RS.Clone
cn.Close
End Sub
'---------------------------------------------------------------------------------------------------------------------
Private Sub AAA(cn)
'Access資料庫連接程序,你的資料庫不同修改這個字串就可以了
cn.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);dbQ=" & App.Path & "\xiaowenwen.mdb"
cn.Open
End Sub
Dim cn As New ADODB.Connection, RS As New ADODB.Recordset
' 注意添加ADO的資料庫連接參考
Private Sub Command1_Click()
’非常標準的系統登錄單擊程序,這種登錄安全性非常好
If Text1.Text = "" Then
MsgBox "你沒有輸入用戶名!", 16, "請輸入!"
Exit Sub
End If
If Text2.Text = "" Then
MsgBox "你沒有輸入用戶密碼!", 16, "請輸入!"
Exit Sub
End If
Call AAA(cn)
RS.Open "Select * from User Where UserName='" & Text1.Text & "'", cn, 2, 2
If RS.EOF = True Then '判斷用戶名對不對
MsgBox "你的用戶名不正確!", 16, "請重新輸入!"
Text1.Text = ""
Text2.Text = ""
Else
If RS!PassWord = Text2.Text Then '判斷密碼是否正確
Form2.Show '登錄成功,進入下一個表單
Else
MsgBox "你的用戶密碼不正確!", 16, "請重新輸入!"
Text2.Text = ""
End If
End If
RS.Clone
cn.Close
End Sub
'---------------------------------------------------------------------------------------------------------------------
Private Sub AAA(cn)
'Access資料庫連接程序,你的資料庫不同修改這個字串就可以了
cn.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);dbQ=" & App.Path & "\xiaowenwen.mdb"
cn.Open
End Sub