推薦能使用#就不要使用 $
a.#{ }
1.相當于JDBC中的PreparedStatement ,是經過預編譯的,安全
2.會為參數自動拼接引号
3.執行sql效果
select * from user where uid="1" and username="cathy"
b.${ }
1.相當于JDBC中的Statement ,未經過預編譯,非安全,存在sql注入危險
2.并不會給參數自動拼接引号
3.執行sql效果
select * from user where uid=1 and username=cathy
寫一個sql注入的例子
假設該表中有1個使用者,賬号為cathy,密碼為:pwd123
理想查詢條件應為
select * from user where username=cathy and password=pwd123
背景sql代碼
String sql = "SELECT * " +
"FROM user "+
"WHERE username='"+userName+"' " +
"AND password='"+password+"'";
但是如果使用者惡意輸入:
使用者名:随便輸
密碼 :’ OR ‘1’='1
那麼實際查詢的sql為
select * from user where username='lalalala' and password='' or '1'='1'
能顯示登入,此則為sql注入攻擊