Ayuda con BD
Hola que tal de nuevo yo jaja que noob soy lo se :c
Ahora se me presenta un problema algo raro no se como solucionarlo bueno lo explico
Tengo la siguiente interface de login
public void programarEntrar(ActionEvent event){
String nombre = txtNombre.getText();
String contra = new String (txtContra.getCharacters().toString());
Connection db = new conectarDB().conectar_BD();
try {
Statement st = db.createStatement();
ResultSet rs = st.executeQuery("select * from user where usuario = '" +nombre+ "' and contra = '"+contra+"'");
if(rs.next()){
if (rs.getInt(5) == 1){
administrarUsuarios usuario = new administrarUsuarios(nombre);
frmPrincipalAdministrador administradorPrincipal = new frmPrincipalAdministrador(
usuario.getID(),
usuario.getNombre(),
usuario.getUsuario(),
usuario.getContra(),
usuario.getTipo()
);
}else {
frmPrincipalUsuarios administradorUsuarios = new frmPrincipalUsuarios();
}
}else{
JOptionPane.showMessageDialog(null, "El usuario y contraseña que se a intruducido no coinciden.", new datosDB().getNombreConsultorio(), JOptionPane.INFORMATION_MESSAGE);
//txtNombre.setText("");
txtContra.setText("");
}
rs.close();
st.close();
db.close();
} catch (SQLException e) {
e.printStackTrace();
}
((Node) (event.getSource())).getScene().getWindow().hide();
}
String nombre = txtNombre.getText();
String contra = new String (txtContra.getCharacters().toString());
Connection db = new conectarDB().conectar_BD();
try {
Statement st = db.createStatement();
ResultSet rs = st.executeQuery("select * from user where usuario = '" +nombre+ "' and contra = '"+contra+"'");
if(rs.next()){
if (rs.getInt(5) == 1){
administrarUsuarios usuario = new administrarUsuarios(nombre);
frmPrincipalAdministrador administradorPrincipal = new frmPrincipalAdministrador(
usuario.getID(),
usuario.getNombre(),
usuario.getUsuario(),
usuario.getContra(),
usuario.getTipo()
);
}else {
frmPrincipalUsuarios administradorUsuarios = new frmPrincipalUsuarios();
}
}else{
JOptionPane.showMessageDialog(null, "El usuario y contraseña que se a intruducido no coinciden.", new datosDB().getNombreConsultorio(), JOptionPane.INFORMATION_MESSAGE);
//txtNombre.setText("");
txtContra.setText("");
}
rs.close();
st.close();
db.close();
} catch (SQLException e) {
e.printStackTrace();
}
((Node) (event.getSource())).getScene().getWindow().hide();
}
Me corre todo bien y si funciona
el problema viene en que no hace el close a las querys ni conecciones necesito cerrarlos por que trabajo en un server y se me saturan las conecciones si no las cierro
Cualquier ayuda es agradecida de antemano
- Lolovive2's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Sencillo usa finally
Tu problema se soluciona usando la clausula finally, esta te sirve para ejecutar bloques de código independientemente de si el bloque de código del try lanza o no una excepción (no importando si es la que capturas en el catch o es otra distinta).
String nombre = txtNombre.getText();
String contra = new String (txtContra.getCharacters().toString());
Connection db = null;
ResultSet rs = null;
Statement st = null;
try {
db = new conectarDB().conectar_BD();
st = db.createStatement();
rs = st.executeQuery("select * from user where usuario = '" +nombre+ "' and contra = '"+contra+"'");
if(rs.next()){
if (rs.getInt(5) == 1){
administrarUsuarios usuario = new administrarUsuarios(nombre);
frmPrincipalAdministrador administradorPrincipal = new frmPrincipalAdministrador(
usuario.getID(),
usuario.getNombre(),
usuario.getUsuario(),
usuario.getContra(),
usuario.getTipo()
);
}else {
frmPrincipalUsuarios administradorUsuarios = new frmPrincipalUsuarios();
}
}else{
JOptionPane.showMessageDialog(null, "El usuario y contraseña que se a intruducido no coinciden.", new datosDB().getNombreConsultorio(), JOptionPane.INFORMATION_MESSAGE);
//txtNombre.setText("");
txtContra.setText("");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(db!=null){
db.close();
}
}
((Node) (event.getSource())).getScene().getWindow().hide();
}
Inyección de SQL
Y ahí va ooooootro ejemplo más de aplicación vulnerable a inyección de SQL.
Por favor usa este password con cualquier usuario válido o inválido:
'; drop table user; --
Y nos platicas qué pasa cuando haces login.
Pero si la URL tuviese...
Puesto que se trata de MySQL (que es lo único que ofrece ClearDB), lo más probable es que ocurra una excepción. Pero si la URL tuviese
allowMultiQueries=true
…entonces
Qué tal un bonito
' OR 'x'='x
Agradecer
Gracias ya me termina la conexion te lo agradesco bro
Nunca pense en el sql injection
La verdad como es una aplicacion de escritorio nunca se me ocurrio y ni por la mente se me paso las sql injection ademas de que solo tengo poco trabajando con bases de datos gracias por recalcar eso deja arreglo eso me salvaste de un fail total
Hazle caso
Pero hazle caso a @ezamudio checa los post sobre inyección SQL:
http://www.javamexico.org/blogs/ezamudio/ejemplo_de_inyeccion_de_sql
Hay algunos más búscalos.
An Introduction to SQL Injection
He aquí un artículo que, aunque es antiquísimo (enero de 2004), no deja de ser muy interesante: An Introduction to SQL Injection Attacks for Oracle Developers.