Java中的SQL注入可能:是使用Java的PreparedStatement和MySQL的存儲程序
PreparedStatement stmt = myConnection.prepareStatement("CALL myStoredRoutine(?, ?, ?)");
stmt.setString(1, a);
stmt.setString(2, b);
stmt.setString(3, c);
stmt.executeQuery();
如果我的存儲例程是MySQL是有可能未過濾字符串中注入什麼東西進入我的代碼?
基本上沒有。但是如果你的存儲過程構建了一個動態的sql語句並執行它,它可能變成一個可能的SQL注入。 –
可以說你有這個查詢'SELECT * FROM userTable WHERE userName =?'。如果你正在使用'preparedStatement',它將直接發送到編譯它的數據庫,然後''setString()'方法中的'userName'將被替換。如果它發現一個非法值,它會導致異常被拋出。像''或'1'='1'這樣的'userName'將被視爲整個字符串,而不是像'or'和'='這樣的涉及運算符的語句。因此,這是安全的。 – Lion