如何防止SQL注入
什么是SQL注入?就是未經檢查或者未經充分檢查的用戶輸入數據,意外變成了代碼被執行。
舉個例子,業務代碼
我們的想法很美好,想的是根據用戶傳進來的參數用戶名和密碼進行查詢,我們也確實應該這樣子操作。可是對于數據庫來說不是這么想的,我們給它的sql它會進行編譯,編譯為了自己的語法后再進行執行操作。so,我們會發現很多時候編譯結果和我們想的不一樣,這就是sql注入了。
比如 傳遞參數 a’ or 1 = '1 和 123456
我們想要的是查詢用戶名為 a’ or 1 = '1 密碼為123456的用戶,但結果確是把所有的密碼為123456的都查出來了。那就會有其它的更大的危害。
有的同學說:我對參數進行判斷,有空格就返回等等。可是你的字段里本身就有空格怎么辦呢?
那怎么辦呢
解決辦法就是讓數據庫采取和我們所想象的一樣的方式進行執行,傳什么就查什么,我傳 a’ or 1 = ‘1 和 123456,就查詢用戶名為 a’ or 1 = '1 密碼為123456的用戶,所以就運用到了一個東西叫預編譯,它的本質和我們上述Java代碼是一樣的:創建函數、傳遞參數、執行函數。不需要關心你的參數會對我有任何影響,參數是什么就是什么
//創建一個函數 prepare myfun from 'select * from db where id = ?';//傳遞參數 set @str='2'//執行函數 execute myfun using @str是不是和上述的java代碼是一樣的:創建login函數,傳遞參數,執行這個函數,這就是防止sql注入的最基本原理
總結
- 上一篇: SharePoint Framework
- 下一篇: oracle修改数据库国际字符集,Ora