我編寫了以下部分,它是一個帶有兩個STRING參數的Java方法login和pass,表示用戶的登錄名和密碼,以檢查用戶是否在數據庫表中找到。JDBC ResultSet SQL錯誤
Statement stmt = connection.createStatement();
ResultSet rs = statement.executeQuery ("SELECT * FROM users WHERE username = '"
+ login + "' AND passwd = '" + pass + "'");
測試時代碼正常工作。我在一本書中讀到,有些情況下可能會產生SQL錯誤,但並未提及上述代碼可能導致SQL錯誤的情況。你能否簡要介紹一下這些情況?還有,我該如何編寫一個能夠防止發生這種錯誤的代碼版本?
例如: '字符串登錄=「用戶名「;刪除數據庫;提交」;' –
@BorisPavlović好的嚇人例如 – Zohaib
@Zohaib:但這取決於數據庫很多。 Boris的攻擊不適用於Oracle或PostgreSQL,因爲它們不允許在單個'executeQuery()'調用中使用多個語句。我認爲(只有?)SQL Server和MySQL可以針對特定的攻擊行事。 –