7.하드코드된 비밀번호 - 안전하지 않은 코드/안전한 코드-Java

CODEDRAGON Security/SecureCoding

반응형

 

7.하드코드된 비밀번호

http://codedragon.tistory.com/5304

 

 

CASE

데이터베이스 연결을 위한 패스워드를 소스코드 내부에 상수 형태로 하드코딩 하는 경우, 접속 정보가 그대로 노출될 수 있어 위험합니다.

안전하지 않은 코드-Java

public class MemberDAO {

private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

private static final String URL = "jdbc:oracle:thin:@192.168.0.3:1521:ORCL";

private static final String USER = "SCOTT"; // DB ID;

private static final String PASS = "SCOTT"; // DB PW;

Member_List mList

 

public MemberDAO() {

}

 

public MemberDAO(Member_List mList) {

this.mList = mList

}

 

public Connection getConn() {

 

Connection con = null;

try {

Class.forName(DRIVER);

con = DriverManager.getConnection(URL, USER, PASS);

} catch (Exception e) {

log.error(e.getMessage());

}

return con;

 

}

// ……

}

 

패스워드는 안전한 암호화 방식으로 암호화하여 별도의 분리된 공간(파일)에 저장해야 하며, 암호화된 패스워드를 사용하기 위해서는 복호화 과정을 거쳐야 합니다.

안전한 코드-Java

public class MemberDAO {

private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

private static final String URL = "jdbc:oracle:thin:@192.168.0.3:1521:ORCL";

private static final String USER = "SCOTT"; // DB ID

Member_List mList;

 

// ……

public Connection getConn() {

Connection con = null;

try {

Class.forName(DRIVER);

String PASS = props.getProperty("EncryptedPswd");

byte[] decryptedPswd = cipher.doFinal(PASS.getBytes());

PASS = new String(decryptedPswd);

con = DriverManager.getConnection(URL, USER, PASS);

} catch (Exception e) {

log.error(e.getMessage());

}

return con;

}

}