我們正在嘗試調試一些遺留代碼。我們發現,我們可以通過爲所有用戶使用密碼「密碼」登錄系統。我們還可以使用用戶名「username」和密碼「password」進行登錄,並且可以使用用戶名「username」和系統中某個用戶的密碼進行登錄。此SQL代碼是否應讓我們使用「用戶名」和「密碼」登錄?
這使我們認爲它可能是SQL查詢的問題,它可能與登錄表單中的用戶名字段與列「用戶名」或字符串「用戶名」匹配。 (與密碼相同)。
但是,我們不幸的是VB.net人並且無論我們做什麼,這種行爲似乎都是一樣的。這裏是原代碼:
SQLcommand.CommandText = "SELECT level FROM tblUsers WHERE username = """ & username & """ AND password = """ & password & """"
SQLreader = SQLcommand.ExecuteReader()
(我們不知道所有的"""
s爲約)
因此,使用我們所知道的編程和SQL我們這樣做:
SQLcommand.CommandText = "SELECT level FROM tblUsers WHERE `username` = """ & username & """ AND `password` = """ & password & """"
SQLreader = SQLcommand.ExecuteReader()
其中沒有效果,類似地:
SQLcommand.CommandText = "SELECT level FROM tblUsers WHERE tblUsers.username = """ & username & """ AND tblUsers.password = """ & password & """"
SQLreader = SQLcommand.ExecuteReader()
也沒有效果。
所以問題是這是SQL代碼的問題?還是我們看錯了地方?我不認爲我們看錯了地方。儘管我們不是VB.net人,但我們仍然非常精通編程。也輸出(跟蹤)SQLreader(0)
返回1
作爲用戶名和密碼,這將意味着它是匹配的東西與「用戶名」和「密碼」的查詢。
任何幫助將是偉大的。有什麼我們可以忽略的嗎?
感謝
(免責聲明:!這個代碼是不是在生產環境中的任何地方使用,您可以現在都放寬)
「tblUsers」表中的數據是什麼樣的?在VB.NET中,通過加倍字符串(在SQL Server中這是正確的字符串分隔符),可以在字符串中轉義一個'''。「 – Oded 2012-04-20 16:13:50
我會告訴你數據!:)給我一分鐘什麼是不對? – 2012-04-20 16:15:30
在SQL Server中,你可以用單引號或雙引號分隔字符串,這就是我的意思。 – Oded 2012-04-20 16:16:13