網上說的SQL是什么意思啊?
一般開發,肯定是在前臺有兩個輸入框,一個用戶名,一個密碼,會在后臺里,讀取前臺傳入的這兩個參數,拼成一段SQL,例如:
select count(1) from tab where usesr=userinput and pass = passinput,把這段SQL連接數據后,看這個用戶名/密碼是否存在,如果存在的話,就可以登陸成功了,如果不存在,就報一個登陸失敗的錯誤。對吧。但是有這樣的情況,這段SQL是根據用戶輸入拼出來,如果用戶故意輸入可以讓后臺解析失敗的字符串,這就是SQL注入,例如,用戶在輸入密碼的時候,輸入 '''' ' or 1=1'', 這樣,后臺的程序在解析的時候,拼成的SQL語句,可能是這樣的:
select count(1) from tab where user=userinput and pass='' or 1=1; 看這條語句,可以知道,在解析之后,用戶沒有輸入密碼,加了一個恒等的條件 1=1,這樣,這段SQL執行的時候,返回的 count值肯定大于1的,如果程序的邏輯沒加過多的判斷,這樣就能夠使用用戶名 userinput登陸,而不需要密碼。
防止SQL注入,首先要對密碼輸入中的單引號進行過濾,再在后面加其它的邏輯判斷,或者不用這樣的動態SQL拼。