String sSQL = "select RFC,Contraseña from Administradores where RFC='" + txtUsuario.getText() + "' and Contraseña='" + txtContrasena.getText() + "'";
String[] registros = new String[2];
Try {
conect();
conexion = DriverManager.getConnection("jdbc:sqlite:" + base);
Statement stat = conexion.createStatement();
ResultSet rs = stat.executeQuery(sSQL);
while (rs.next()) {
registros[0] = rs.getString("RFC");
registros[1] = rs.getString("Contraseña");
}
stat.close();
conexion.close();
} catch (SQLException ex)
{
JOptionPane.showMessageDialog(null,"DB connection error");
}
if ((txtContrasena.getText().equals(registros[1])) || (txtUsuario.getText().equals(registros[0]))) {
JOptionPane.showMessageDialog(null, "Access Granted");
Escoger variable = new Escoger();
variable.setVisible(true);
dispose();
} else {
if (txtContrasena.getText() != (registros[1])) {
JOptionPane.showMessageDialog(null, "Incorrect password");
}
}
-2
A
回答
3
這...
String sSQL = "select RFC,Contraseña from Administradores where RFC='" +
txtUsuario.getText() + "' and Contraseña='" +
txtContrasena.getText() + "'";
會自動提示它是。輸入到txtUsuario
和txtContrasena
中的任何內容都可能包含可以由數據庫的SQL引擎執行的有效SQL代碼。
您應該使用:
String sSQL = "select RFC,Contraseña from Administradores where RFC=? and Contraseña=?";
然後,您將需要更改...
Statement stat = conexion.createStatement();
要
PreparedStatement stat = conexion.preapreStatement(sSQL);
stat.bindString(1, txtUsuario.getText());
stat.bindString(2, txtContrasena.getText());
3
此外,你不應該在數據庫中存儲密碼。您應該在數據庫中存儲散列版本的密碼,並檢查密碼,以散列您給出的密碼(安全地,通過網絡https),並將該散列值與數據庫中的散列值進行比較。使用安全的哈希算法(例如不是MD5)。更好的方法是,連接用戶名和密碼並將其散列,然後將其用作存儲在數據庫中的值並進行比較(這樣,具有相同密碼的兩個用戶不會散列爲相同的值)。
+0
+1這真的很棒的建議! – MadProgrammer
0
是的。改用PreparedStatements。用佔位符替換用戶和密碼值。
String SampleQuery = "SELECT * FROM YourTable WHERE User = ? AND Password = ?";
String UserName = UsernameBox.getText();
String Password = PasswordBox.getText();
PreparedStatement prep = conn.prepareStatement(SampleQuery);
prep.setString(1, UserName);
prep.setString(2, Password);
ResultSet result = prep.executeQuery();
相關問題
- 1. 此代碼是否容易受到SQL注入攻擊?
- 2. SQL Server 2008表值是否容易受到SQL注入攻擊?
- 3. 容易受到SQL注入攻擊的PHP代碼
- 4. 此代碼是否容易受到XSS攻擊?
- 5. SQL注入嘗試 - 我的代碼是否易受攻擊?
- 6. Hibernate查詢是否容易受到SQL注入攻擊
- 7. 此代碼是否安全,不受任何SQL注入攻擊?
- 8. 這段代碼是否容易出現sql注入攻擊?
- 9. 此C用戶輸入代碼是否易受攻擊?
- 10. 這是查詢容易受到SQL注入攻擊
- 11. SESSION登錄易受攻擊?
- 12. 這段代碼是否容易受到黑客攻擊?
- 13. 這是否容易受到SQL注入?
- 14. Nhibernate易受SQL注入攻擊嗎?
- 15. Google App Engine應用程序是否容易受到SQL注入攻擊?
- 16. _frontendCSRF cookie似乎很容易受到SQL注入攻擊
- 17. 這個站點容易受到SQL注入攻擊嗎?
- 18. 爲什麼MySQL更容易受到SQL注入攻擊
- 19. 測試一個網站是否易受Sql注入攻擊
- 20. 此存儲過程是否容易受到SQL注入?
- 21. 此LINQ語句是否容易受到SQL注入的影響?
- 22. 是我的SQL查詢容易受到SQL注入或其他攻擊
- 23. 現代瀏覽器是否容易受到HTTP分裂攻擊
- 24. 此密碼生成算法是否容易受到強力攻擊?
- 25. Codeigniter - 活動記錄是否容易受到SQL注入?
- 26. 內容代碼HTML標籤XSS容易受到攻擊嗎?
- 27. 瀏覽器URL編碼XSS攻擊是否易受攻擊?
- 28. 爲什麼我的代碼容易受到xss攻擊?
- 29. 易受攻擊的PHP代碼示例?
- 30. ajax調用容易受到xss攻擊
爲什麼你認爲它不是? – SLaks
如果你沒有使用準備好的陳述,答案是肯定的。 – chrylis