Esse PreparedStatement Esta Correto?

5 respostas
SirDominque

Gente, Ainda estou montando o Banco de dados, então nao tive como testar.
Pesquisei aqui no Fórum, e achei um exemplo de insert.
Queria saber se esse meu de select esta correto :

conn = DriverManager.getConnection(url,username, password);
           order = "Select * From Validator Where email = ? and password = ? and code = ? ";
           PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("Select * From Validator Where email = ? and password = ? and code = ? ");  
           
           stmt.setString(0,email);
           stmt.setString(1,password);
           stmt.setString(2,code);

No banco de dados haverá uma coluna com email,password e code;
e o programa ira comparar os valores do programa com o do Banco De Dados.

Em questão de Segurança, voces podem me recomendar mais alguma coisa ?

Valeu gente!

5 Respostas

SirDominque

Esse aqui é Código Pronto.
Fiz bastante redundancia por causa da questão da segurança.Esse é o jeito certo de ter mais proteção ?

package Security;

import com.mysql.jdbc.JDBC4PreparedStatement;
import com.mysql.jdbc.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author André Lopes
 */
public class Validate {
    
    private String emailInserted,passwordInserted,codeInserted;
    protected String driverName,serverName,myDataBase;
    private Connection conn = null;
    
    
    public static void main(String args[])
    {
        Validate v1 = new Validate();
        v1.Validate();
    }
    
    
     public boolean Validate()
     {
        boolean valid = false; //If valid == true, permitir acesso; Se valid == false, travar acesso;
        String order = null;
         try {
           conn = DriverManager.getConnection("URL","username of database", "password of database");
           order = "Select * From Validator Where email = ? and password = ? and code = ? ";
           PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("Select * From Validator Where email = ? and password = ? and code = ? ");  
                                     
                                         // Coluna 0 = ID
           stmt.setString(0,emailInserted);     // Coluna 1
           stmt.setString(1,passwordInserted); // Coluna 2
           stmt.setString(2,codeInserted);    // Coluna 3
           
           
           ResultSet queryAnswer = stmt.executeQuery();
           
           String idFromDb = null;
           idFromDb = queryAnswer.getString(0);
           
           String emailFromDb = null;
           emailFromDb = queryAnswer.getString(1);
           
           String passwordFromDb = null;
           passwordFromDb = queryAnswer.getString(2);
           
           String codeFromDb = null;
           codeFromDb = queryAnswer.getString(3);
           
            conn.commit();
            conn.close();
            
            //Compara os Dados
            if(idFromDb != null)
            {
                if (emailFromDb == emailInserted)
                {
                    if(passwordFromDb == passwordInserted)
                    {
                        if (codeFromDb == codeInserted)
                        {
                            valid = true;
                        } else valid = false;
                    } else valid = false;
                } else valid = false;
            } else valid = false;
          
            
            
            if ((valid == true) && (idFromDb != null) && (emailFromDb != null) && (passwordFromDb != null) && (codeFromDb != null)) return valid;
           
            
        } catch (SQLException ex) {System.out.println(ex.getMessage());}
          return false;
     }
     
   
    

}
J

As redundâncias não são necessárias.

Para comparar Strings, você deve usar equals, por exemplo:

if (emailFromDb.equals(emailInserted))

Mesmo assim é desnecessário…

Evite usar select *

Você pode armazenar um hash da senha usando md5 e alguma coisa (por exemplo o id) como salt number… jamais armazene a senha aberta no banco de dados…

SirDominque
jmmenezes:
As redundâncias não são necessárias.

Para comparar Strings, você deve usar equals, por exemplo:

if (emailFromDb.equals(emailInserted))

Mesmo assim é desnecessário...

Evite usar select *

Você pode armazenar um hash da senha usando md5 e alguma coisa (por exemplo o id) como salt number... jamais armazene a senha aberta no banco de dados...

OK! valeu ! A parte de transformar a senha em Md5 eu acho que consigo me virar, mas agora "add no hash o ID como salt Number" ? Não entendi isso !!!

package Security;


import com.mysql.jdbc.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author André Lopes
 */
public class Validate {
    
    private String emailInserted,passwordInserted,codeInserted;
    protected String driverName,serverName,myDataBase;
    private Connection conn = null;
    
    
    public static void main(String args[])
    {
        Validate v1 = new Validate();
        v1.Validate();
    }
    
    
     public boolean Validate()
     {
        boolean valid = false; //If valid == true, permitir acesso; Se valid == false, travar acesso;
        String order = null;
         try {
           conn = DriverManager.getConnection("URL","username of database", "password of database");
           order = "Select * From Validator Where email = ? and password = ? and code = ? ";
           PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("Select * From Validator Where email = ? and password = ? and code = ? ");  
                                     
                                         // Coluna 0 = ID
           stmt.setString(0,emailInserted);     // Coluna 1
           stmt.setString(1,passwordInserted); // Coluna 2
           stmt.setString(2,codeInserted);    // Coluna 3
           
           
           ResultSet queryAnswer = stmt.executeQuery();
           
           String idFromDb = null;
           idFromDb = queryAnswer.getString(0);
           
           String emailFromDb = null;
           emailFromDb = queryAnswer.getString(1);
           
           String passwordFromDb = null;
           passwordFromDb = queryAnswer.getString(2);
           
           String codeFromDb = null;
           codeFromDb = queryAnswer.getString(3);
           
            conn.commit();
            conn.close();
            
            //Compara os Dados
            if(idFromDb != null)
            {
                if (emailFromDb.equals(emailInserted))
                {
                    if(passwordFromDb.equals(passwordInserted))
                    {
                        if (codeFromDb.equals(codeInserted))
                        {
                            valid = true;
                        } 
                    } 
                } 
            } else valid = false;
          
            
            
            if ((valid == true) && (idFromDb != null) && (emailFromDb != null) && (passwordFromDb != null) && (codeFromDb != null)) return valid;
           
            
        } catch (SQLException ex) {System.out.println(ex.getMessage());}
          return false;
     }
     
   
    

}
J

Ao invés de gravar o HASH puro… utilize alguma coisa antes como salt number, por exemplo… ao invés de fazer md5(senha) faça md5(id + senha)

SirDominque
String MD5 = “adnaskfnaksfnaksfbkabgkadsb”;

String id = “01”;

String senha = “wow”;

String resultado = (MD5 + id + senha);

save(resultado);

De forma didática, seria isso ?

valeu por ter respondido!!
è o mesmo caso para criptografia SHA-2 ?

Fiz esse outro tópico :
http://www.guj.com.br/java/282554-criptografia-md5-#1491036

Criado 17 de setembro de 2012
Ultima resposta 17 de set. de 2012
Respostas 5
Participantes 2