mysql語法之--#與$符號關鍵字的用法(一)
阿新 • • 發佈:2019-02-15
一、#與$ 的sql拼接區別
1、${param}傳遞的引數會被當成sql語句中的一部分,比如傳遞表名,欄位名
例子:(傳入值為id)
order by ${param}
則解析成的sql為:
order by id
#{parm}傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號
例子:(傳入值為id)
select * from table where name = #{param}
則解析成的sql為:
select * from table where name = "id"
二、#與$ 的安全性
1、#能防止SQL注入而$不能
三、 sql注入簡介
如:某個網站的登入驗證的SQL查詢程式碼為:
strSQL =
"SELECT * FROM users WHERE (name = '"
+ userName +
"') and (pw = '"
+
passWord
+
"');"
userName =
"1' OR '1'='1"
;
與passWord
=
"1' OR '1'='1"
;
時,將導致原本的SQL字串被填為
strSQL =
"SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
也就是實際上執行的SQL命令會變成下面這樣的
strSQL =
"SELECT * FROM users;"
這樣在後臺帳號驗證的時候巧妙地繞過了檢驗,達到無賬號密碼,亦可登入網站。所以SQL注入攻擊被俗稱為黑客的填空遊戲。