Login Utilizando Md5, Servlet y Jsp

7
LOGIN UTILIZANDO MD5, Servlet y JSP YANETH MEJIA RENDON 1. Cargamos la página (.jsp) y pedimos el nombre de usuario, y la contraseña. 2. Usando JavaScript, encriptamos la contraseña en MD5 (es más seguro encriptarla desde el cliente) 3. Enviamos la contraseña encriptada al Servlet, y la comparamos con la que tenemos en la BD 4. Si todo funciona como debe (previas validaciones), mostramos la página del admin (por ahora del admin, luego vienen otras). En nuestro archivo jsp, solamente tenemos esto: El link al archivo .js para encriptar: <script type="text/javascript" src="MD5.js"></script> Se tiene en la misma carpeta. Un form, que tiene el campo para el nombre de usuario, la pass, y uno para que vean la pass encriptada. Ahora, el servlet login. Los import necesarios (además de los que ya vienen) son: import javax.servlet.http.*; import java.sql.*; <form action="/ConectaBD/login" method="post"> Nombre de Usuario:<input type="Text" name="nombre" size="20"><br /> Contraseña: <input type="Password" name="pass" onkeyup="this.form.hash.value = MD5(this.form.pass.value)"><br /> MD5 Generado: <input type="text" name="hash" value="" style="width: 336px;" /><br /> <input type="submit" name="envio" value="Enviar"> </form>

description

MD5, seguridad informatica para loguearse, servlets y jsp principios

Transcript of Login Utilizando Md5, Servlet y Jsp

  • LOGIN UTILIZANDO MD5, Servlet y JSP

    YANETH MEJIA RENDON

    1. Cargamos la pgina (.jsp) y pedimos el nombre de usuario, y la contrasea.

    2. Usando JavaScript, encriptamos la contrasea en MD5 (es ms seguro encriptarla desde el cliente)

    3. Enviamos la contrasea encriptada al Servlet, y la comparamos con la que tenemos en la BD

    4. Si todo funciona como debe (previas validaciones), mostramos la pgina del admin (por ahora del

    admin, luego vienen otras).

    En nuestro archivo jsp, solamente tenemos esto:

    El link al archivo .js para encriptar:

    Se tiene en la misma carpeta.

    Un form, que tiene el campo para el nombre de usuario, la pass, y uno para que vean la pass

    encriptada.

    Ahora, el servlet login.

    Los import necesarios (adems de los que ya vienen) son:

    import javax.servlet.http.*;

    import java.sql.*;

    Nombre de Usuario:

    Contrasea:

    MD5 Generado:

  • Variables de Clase:

    private String nombre, pass, //En pass se guarda la que ingreso el usuario

    AttNombre ="", AttAppe ="", //Para guardar los datos que nos regrese la BD

    SQLEx = "", EX = ""; //Los errores que podamos tener

    Empezamos con el mtodo doPost. El doGet si gustan pueden borrarlo, no lo vamos a usar.

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    HttpSession sesion = request.getSession(true);

    this.validar(request.getParameter("nombre"), request.getParameter("hash"));

    sesion.setAttribute("nombre", this.AttNombre);

    sesion.setAttribute("ape", this.AttAppe);

    response.sendRedirect(response.encodeRedirectURL("/ConectaBD/postLog.jsp") );

    }

    Lo primero que hacemos, es crear una sesin para el usuario.

    Luego llamamos a la funcin validar para que valide los campos (le enviamos los datos

    ingresados por el usuario). Fjense que estoy tomando el texto del input hash, porque las

    contraseas las tengo encriptadas en la BD.

    Despus de que validar cumpla su trabajo (que veremos ms adelante), guardamos, como

    variables de sesin, el nombre y el apellido de la persona. (Nosotros ingresamos solo el nombre

    de usuario.)

    Por ltimo, vamos al archivo postLog.jsp.

    Veamos que hace validar:

    private void validar(String parNom, String parPass){

  • Boolean estado = false;

    String falta = null;

    if(!parNom.isEmpty()){

    if(!parPass.isEmpty()){

    estado = true;

    this.nombre = parNom;

    this.pass = parPass;

    }else{ falta = "No se ingres la Contrasea";

    }else{ falta = "No se ingres el Nombre de Usuario"; }

    this.lectorBD(estado, falta);

    }

    Fijamos una variable tipo Boolean para definir el estado, y falta para guardar un mensaje.

    Si parNom NO viene vaca, comprobamos que parPass NO venga vaca tampoco.

    Cuando esto se cumpla, cambiamos el estado a true. En caso de que alguna de ellas est vaca,

    guardamos el mensaje correspondiente.

    Llamamos a la funcin lectorBD

    Siguiente -> lectorBD

    private void lectorBD(Boolean estado, String aviso){

    if(estado){

    try{

    String MySQLDriver ="com.mysql.jdbc.Driver",

    DriGetConn = "jdbc:mysql://127.0.0.1/proyec",

    //El nombre de usuario y la contrasea para entrar a BD

  • userBD = "USUARIOBD", passBD ="CONTRASEA-DE-BD",

    selectID ="SELECT id FROM usernames WHERE username ='",

    IDpass ="", //El ID de la persona que se loguea

    selectMD5 ="SELECT password FROM passwords WHERE id ='",

    passMD5 = "", //La contrasea de la persona leida desde la BD

    selectDatos ="SELECT nombre, apellido FROM dusuarios WHERE rut='";

    Class.forName(MySQLDriver);

    Connection conexion = DriverManager.getConnection

    (DriGetConn, userBD, passBD);

    Statement query = conexion.createStatement(

    ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

    ResultSet rs = query.executeQuery(selectID + nombre +"'");

    rs.first();

    IDpass = rs.getString("id");

    rs.close();

    rs = query.executeQuery(selectMD5 + IDpass + "'");

    rs.first();

    passMD5 = rs.getString("password");

    rs.close();

    En esta primera parte hacemos lo siguiente:

    Si estado viene como true, entramos a leer datos desde la BD.

    Las variables, son para acortar cdigo simplemente.

  • Definimos el Driver para MySQL.

    Despus, y como se tienen definidas las tablas, buscamos el id del username ingresado.

    Con este id, buscamos la contrasea del username ingresado. Esta contrasea es la que esta

    guardada en la BD.

    En la segunda parte >

    if(this.passMatch(passMD5)){

    rs = query.executeQuery(selectDatos + IDpass +"'");

    rs.first();

    this.AttNombre = rs.getString(1);

    this.AttAppe = rs.getString(2);

    rs.close();

    }

    query.close(); conexion.close();

    }catch(SQLException ex){

    this.SQLEx = "Se produjo una excepcin durante la conexin: "+ ex.toString();

    }catch(Exception ex){

    this.EX = "Se produjo una excepcin: "+ ex.toString();

    }

    }

    }

    Ahora, llamamos a la funcin passMatch para comprobar que las 2 sean iguales (la que ingresamos

    en el formulario, y la que lemos desde la BD). La usamos directamente en el if.

    Enviamos como parmetro la contrasea leda desde la BD.

    Sabemos que son iguales, por lo tanto guardamos en las variables de clase AttNombre y

    AttAppe lo que obtenemos desde la BD.

    Si tenemos error de SQL, captamos la Exception. Lo mismo con otros errores.

    Veamos la funcin passMatch()

  • private Boolean passMatch(String passMD5){

    if(this.pass.equals(passMD5)){

    return true;

    }else{

    return false;

    }

    }

    Comparamos el string entregado por el form, con el string de la BD

    Si son iguales, retornamos un true. De lo contrario, un false

    Eso es todo!

    Por ltimo, el cdigo de postLog.jsp

    Primero las lemos:

    Luego las escribimos:

    Tenemos las variables de sesin, que guardamos en el servlet

  • VALIDACION DE CADENAS DE TEXTO, E-MAIL, URL Y COMENTARIOS

    Please provide your name, email address (won't be published) and a comment Name (required, at least 2 characters) E-Mail (required) URL (optional) Your comment (required) $("#commentForm").validate();