MySQL為例,現在專案大部分都用框架實現,比如MyBatis框架,輕量級,功能強大:
在MyBatis中,如果寫${變數名},則為直接把傳入的值填充到SQL語句中;
如果寫#{變數名},則為傳入的值只能作為值,放到SQL語句中。
舉例:
DELETE FROM student WHERE name=${stu_name}
如果這樣寫,假如使用者惡意傳入這樣一個字串:abc OR 1=1,那麼整個SQL就變成了
DELETE FROM student WHERE name=abc OR 1=1,結果就是全部資料都刪掉了。
這就是SQL注入,如果把${stu_name}換成#{stu_name},那麼依然傳入上面的字串,那麼SQL是這樣的:DELETE FROM student WHERE name=`abc OR 1=1`,會刪除名字為abc OR 1=1的學生,沒有這個學生則什麼都刪除不掉,這樣就防止了SQL注入。
MySQL為例,現在專案大部分都用框架實現,比如MyBatis框架,輕量級,功能強大:
在MyBatis中,如果寫${變數名},則為直接把傳入的值填充到SQL語句中;
如果寫#{變數名},則為傳入的值只能作為值,放到SQL語句中。
舉例:
DELETE FROM student WHERE name=${stu_name}
如果這樣寫,假如使用者惡意傳入這樣一個字串:abc OR 1=1,那麼整個SQL就變成了
DELETE FROM student WHERE name=abc OR 1=1,結果就是全部資料都刪掉了。
這就是SQL注入,如果把${stu_name}換成#{stu_name},那麼依然傳入上面的字串,那麼SQL是這樣的:DELETE FROM student WHERE name=`abc OR 1=1`,會刪除名字為abc OR 1=1的學生,沒有這個學生則什麼都刪除不掉,這樣就防止了SQL注入。