本文轉自https://www.cnblogs.com/zouqin/p/5314827.html
今天在研發部技術大牛的指點下,我終於明白了為什么要使用SQL預編譯的形式執行數據庫JDBC:
然而總所周知,這種方式極有可能發生SQL注入攻擊,那么什么是SQL注入攻擊呢?
如上圖,我們想刪除一條id = ' sk001 ' 的數據。這是理想情況下,但是如果用戶惡意進行SQL注入攻擊的話,比如這樣
如果用戶像以上者中情況注入SQL的話,相應的對我們的數據庫將產生極大的漏洞和極大的安全問題,那么為什么我說預編譯可以防范SQL注入攻擊呢?
這種方式能防范SQL注入的原理是在SQL參數未注入之前,提前對SQL語句進行預編譯,而其后注入的參數將不會再進行SQL編譯。也就是說其后注入進來的參數系統將不會認為它會是一條SQL語句,而默認其是一條一個參數。
所以回答標題的問題,為什么要使用SQL預編譯來執行數據庫JDBC?
就是防范SQL注入攻擊~
以上屬於個人見解,不足之處請多多指教
3.order by修復建議
select * from userorder by #{name} desc /*有問題sql*/
因為預編譯機制只能處理查詢參數,此處顯然不是查詢參數,需要開發人員自己處理。所以只能這樣拼接:
select * from userorder by ${name} desc
3.order by修復建議
select * from userorder by #{name} desc /*有問題sql*/
因為預編譯機制只能處理查詢參數,此處顯然不是查詢參數,需要開發人員自己處理。所以只能這樣拼接:
select * from userorder by ${name} desc