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 ?
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 ?
packageSecurity;importcom.mysql.jdbc.JDBC4PreparedStatement;importcom.mysql.jdbc.PreparedStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.logging.Level;importjava.util.logging.Logger;/** * * @author André Lopes */publicclassValidate{privateStringemailInserted,passwordInserted,codeInserted;protectedStringdriverName,serverName,myDataBase;privateConnectionconn=null;publicstaticvoidmain(Stringargs[]){Validatev1=newValidate();v1.Validate();}publicbooleanValidate(){booleanvalid=false;//If valid == true, permitir acesso; Se valid == false, travar acesso;Stringorder=null;try{conn=DriverManager.getConnection("URL","username of database","password of database");order="Select * From Validator Where email = ? and password = ? and code = ? ";PreparedStatementstmt=(PreparedStatement)conn.prepareStatement("Select * From Validator Where email = ? and password = ? and code = ? ");// Coluna 0 = IDstmt.setString(0,emailInserted);// Coluna 1stmt.setString(1,passwordInserted);// Coluna 2stmt.setString(2,codeInserted);// Coluna 3ResultSetqueryAnswer=stmt.executeQuery();StringidFromDb=null;idFromDb=queryAnswer.getString(0);StringemailFromDb=null;emailFromDb=queryAnswer.getString(1);StringpasswordFromDb=null;passwordFromDb=queryAnswer.getString(2);StringcodeFromDb=null;codeFromDb=queryAnswer.getString(3);conn.commit();conn.close();//Compara os Dadosif(idFromDb!=null){if(emailFromDb==emailInserted){if(passwordFromDb==passwordInserted){if(codeFromDb==codeInserted){valid=true;}elsevalid=false;}elsevalid=false;}elsevalid=false;}elsevalid=false;if((valid==true)&&(idFromDb!=null)&&(emailFromDb!=null)&&(passwordFromDb!=null)&&(codeFromDb!=null))returnvalid;}catch(SQLExceptionex){System.out.println(ex.getMessage());}returnfalse;}}
J
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…
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 !!!
packageSecurity;importcom.mysql.jdbc.PreparedStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;/** * * @author André Lopes */publicclassValidate{privateStringemailInserted,passwordInserted,codeInserted;protectedStringdriverName,serverName,myDataBase;privateConnectionconn=null;publicstaticvoidmain(Stringargs[]){Validatev1=newValidate();v1.Validate();}publicbooleanValidate(){booleanvalid=false;//If valid == true, permitir acesso; Se valid == false, travar acesso;Stringorder=null;try{conn=DriverManager.getConnection("URL","username of database","password of database");order="Select * From Validator Where email = ? and password = ? and code = ? ";PreparedStatementstmt=(PreparedStatement)conn.prepareStatement("Select * From Validator Where email = ? and password = ? and code = ? ");// Coluna 0 = IDstmt.setString(0,emailInserted);// Coluna 1stmt.setString(1,passwordInserted);// Coluna 2stmt.setString(2,codeInserted);// Coluna 3ResultSetqueryAnswer=stmt.executeQuery();StringidFromDb=null;idFromDb=queryAnswer.getString(0);StringemailFromDb=null;emailFromDb=queryAnswer.getString(1);StringpasswordFromDb=null;passwordFromDb=queryAnswer.getString(2);StringcodeFromDb=null;codeFromDb=queryAnswer.getString(3);conn.commit();conn.close();//Compara os Dadosif(idFromDb!=null){if(emailFromDb.equals(emailInserted)){if(passwordFromDb.equals(passwordInserted)){if(codeFromDb.equals(codeInserted)){valid=true;}}}}elsevalid=false;if((valid==true)&&(idFromDb!=null)&&(emailFromDb!=null)&&(passwordFromDb!=null)&&(codeFromDb!=null))returnvalid;}catch(SQLExceptionex){System.out.println(ex.getMessage());}returnfalse;}}
J
jmmenezes
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)