由注冊用戶名不能使用單引號和雙引號引發的思考
機房收費係統敲完很久了,也很久沒有在CSDN上寫博客了。關於機房收費係統能寫的東西很多,同期的也寫了很多。在測試機房收費係統時如果用戶名裏含有單引號或者雙引號時,每次係統都會報錯或者崩潰。
究其原因是我們目前寫的查詢語句一般如下:
StrSQL="select * from Student_Info where UserName='" & Trim(txtUserName.text) & "'"
當出現單引號或雙引號在UserName中時上麵那段代碼是錯誤的的,當然我們最簡單的解決方法是禁止用戶名中使用單引號和雙引號,如下:
Private Sub txtUserName_KeyPress(KeyAscii As Integer)
If KeyAscii = 39 Or KeyAscii = 34 Then
MsgBox "用戶名格式輸入不正確!"
KeyAscii = 0 '使輸入無效
End If
End Sub
當然這樣是解決了問題,但是還有沒有其他方法來解決這個問題了?如果有為什麼不用呢?目前我還沒有找到,在網上也沒有搜索到相關的解決方法(可能是搜的地方和方法不正確吧)。
帶著這個問題我又發現我測試的幾個網站的用戶名中也都不能使用單引號和雙引號,當然還有其他更多的特殊符號也被禁用了。一次偶然的聽到了關於“SQL注入”這個詞,我想這會不會為了防止SQL注入發生才改用禁用的呢?後來查了一下關於SQL注入的概念覺得似乎關係不大(目前我的理解),這個可能的設想就這樣被我扼殺了。
希望讀者能給我答案!
最後更新:2017-04-03 14:54:23