1. 程式人生 > >badSQL,myBatis中#$區別

badSQL,myBatis中#$區別

badSQL,myBatis中#$區別

在這裡插入程式碼片#{}是預編譯處理, $ {}是字串替換。mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫PreparedStatement的set方法來賦值;mybatis在處理 $ {}時,就是把 $ {}替換成變數的值。使用#{}可以有效的防止SQL注入,提高系統安全性。

對於這個題目我感覺要抓住兩點:

(1)$ 符號一般用來當作佔位符,常使用Linux指令碼的人應該對此有更深的體會吧。既然是佔位符,當然就是被用來替換的。知道了這點就能很容易區分$和#,從而不容易記錯了。

(2)預編譯的機制。預編譯是提前對SQL語句進行預編譯,而其後注入的引數將不會再進行SQL編譯。我們知道,SQL注入是發生在編譯的過程中,因為惡意注入了某些特殊字元,最後被編譯成了惡意的執行操作。而預編譯機制則可以很好的防止SQL注入。