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

  • https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xat1/t31.0-8/11148576_...
    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();
    }

    Me corre todo bien y si funciona

  • https://scontent-lax.xx.fbcdn.net/hphotos-xta1/t31.0-8/10917954_10204207...

    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

  • https://scontent-lax.xx.fbcdn.net/hphotos-xfp1/t31.0-8/11112832_10204207...

    Cualquier ayuda es agradecida de antemano

  • Comentarios

    Opciones de visualización de comentarios

    Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
    Imagen de Cid

    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).

    public void programarEntrar(ActionEvent event){
             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();
    }
    Imagen de ezamudio

    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

    Imagen de ezamudio

    entonces

    Qué tal un bonito ' OR 'x'='x

    Imagen de Lolovive2

    Agradecer

    Gracias ya me termina la conexion te lo agradesco bro

    Imagen de Lolovive2

    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

    Imagen de Cid

    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.