JSP (Java Server Page) - Ayuda Como evitar el sqlinjection en login?

   
Vista:

Ayuda Como evitar el sqlinjection en login?

Publicado por snakechaos (1 intervención) el 17/01/2015 03:32:44
Bueno busque en google pero solo aparece informacion para php..
Lo que ando buscando es como acabar con un sql injection como lo es el ' OR '1'='1 o el ' having 1= 1-- pero en un login en jsp

tengo mi form mas o menos asi en el login.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form action="/appMensajes/ServletValidar" method="post">
    <div class="control-group">
    <table>
        <tr>
            <td><h3>Usuario</h3></td><td><input type="text" name="user"></td>
        </tr>
        <tr>
            <td><h3>Contraseña</h3></td><td><input type="password" name="pass"></td>
        </tr>
 
        <tr>
 
    </tr>
    </table>
        </br>
        <center><input type="submit" class="btn btn-primary" value="Aceptar"></center>
    </div>
</form>



luego lo valido en un servlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        boolean logueado=false;
        if (request.getParameter("user") != null &&
            request.getParameter("pass")!=null) {
            BaseDato bd = new BaseDato();
 
            Usuario u = bd.getUsuario(request.getParameter("user"),
                                      request.getParameter("pass"));
            if (u!=null) {
                HttpSession session = request.getSession(true);
                session.setAttribute("usuario", u.getUser());
                session.setAttribute("nombre", u.getNombre());
                session.setAttribute("id", u.getId_user());
                session.setAttribute("tipo", u.getTipo());
                logueado=true;
            }protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        boolean logueado=false;
        if (request.getParameter("user") != null &&
            request.getParameter("pass")!=null) {
            BaseDato bd = new BaseDato();
 
            Usuario u = bd.getUsuario(request.getParameter("user"),
                                      request.getParameter("pass"));
            if (u!=null) {
                HttpSession session = request.getSession(true);
                session.setAttribute("usuario", u.getUser());
                session.setAttribute("nombre", u.getNombre());
                session.setAttribute("id", u.getId_user());
                session.setAttribute("tipo", u.getTipo());
                logueado=true;
            }
 
        }
        if (logueado) {
            response.sendRedirect("index.jsp");
        } else {
            response.sendRedirect("login.jsp?error=1");
        }
 
    }
 
        }
        if (logueado) {
            response.sendRedirect("index.jsp");
        } else {
            response.sendRedirect("login.jsp?error=1");
        }
 
    }


y poseo una clase llamada Basedato que es de donde hago las consultas el metodo para la consulta la tengo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public Usuario getUsuario (String user, String pass) {
        Statement st;
        Usuario u = null;
 
        if (conex != null) {
            try {
                st = conex.createStatement();
                ResultSet rs = st.executeQuery(String.format("SELECT * FROM usuario WHERE user = '%s' AND pass = '%s'", user, pass));
                if (rs.next())
                    u = new Usuario(rs.getInt("id_user"), rs.getString("user"), rs.getString("pass"), rs.getString("nombre"), rs.getString("email"), rs.getInt("tipo"));
                st.close();
            } catch (SQLException ex) {
            }
        }
 
        return u;
    }


Lei que por el and surge el problema actualmente tengo la vulnerabilidad :/

Alguien me puede ayudar para que esto no ocurra :)

Saludos y gracias por contestar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder