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");
}
}
ответ
Это ...
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());
Посмотрите на Using Prepared Statements для получения более подробной информации
Кроме того, вы никогда не должны хранить пароль в базе данных. Вы должны сохранить хешированную версию пароля в базе данных и проверить пароль, который у вас есть, что вам дано (безопасно, https, если через интернет), и сравнить это хеш-значение с хэш-значением в базе данных. Используйте безопасный алгоритм хеширования (например, MD5). Еще лучше соединить имя пользователя и пароль и хэш, а затем использовать это как значение для хранения в базе данных и сравнить (таким образом, два пользователя с одним и тем же паролем не имеют хэша с одинаковым значением).
+1 Это действительно потрясающий совет! – MadProgrammer
Да. Вместо этого используйте 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. Является ли этот код уязвимым для переполнения буфера?
- 2. Является ли этот PHP-код уязвимым для SQL-инъекции?
- 3. Является ли этот код уязвимым для SQL-инъекции?
- 4. Является ли мой код уязвимым для XSS?
- 5. Является ли это уязвимым для XSS?
- 6. Является ли мой сценарий входа уязвимым для SQL-инъекции?
- 7. Является ли этот дезинфицирующее средство уязвимым для XSS?
- 8. Является ли этот Rails 3 уязвимым для SQL-инъекции?
- 9. Является ли этот сайт уязвимым для атаки SQL-инъекций?
- 10. Является ли этот запрос уязвимым для SQL-инъекции?
- 11. Является ли этот SQL-запрос уязвимым для SQL-инъекции?
- 12. Является ли мой PHP-код уязвимым для XSS?
- 13. Является ли это уязвимым для массового назначения?
- 14. Является ли это уязвимым для XSS?
- 15. Является ли это уязвимым для SQL-инъекции
- 16. Является ли strip_tags() уязвимым для скриптовых атак?
- 17. Является ли Nhibernate уязвимым для SQL-инъекции?
- 18. Является ли этот код Ruby on Rails уязвимым для SQL-инъекции?
- 19. Является ли этот рискованный код?
- 20. Является ли этот избыточный код?
- 21. Является ли этот код потокобезопасным?
- 22. Является ли этот код потокобезопасным?
- 23. Является ли этот код безумным?
- 24. Является ли этот код Эквивалент
- 25. Является ли этот код выпуском?
- 26. Является ли этот код потокобезопасным?
- 27. Является ли этот код корректным?
- 28. Является ли этот код небезопасным?
- 29. Является ли этот код потокобезопасным?
- 30. Является ли этот код небезопасным?
Почему вы думаете, что это не так? – SLaks
Если вы не используете подготовленные заявления, то да. – chrylis