2015년 12월 1일 화요일

보안기능 - 하드코드된 패스워드

1)     하드코드된 패스워드
프로그램 코드 내부에 하드코드된 패스워드를 포함하고, 이를 이용하여 내부 인증에 사용하거나 외부 컴포넌트와 통신을 하는 경우 관리자 정보가 노출 될 수 있어 위험하다. 또한, 코드 내부에 하드코드된 패스워드가 인증실패를 야기하는 경우, 시스템 관리자가 그 실패의 원인을 파악하기 쉽지 않은 단점이 있다.

n  안전한 코딩 기법
     패드워드는 암호화하여 별도의 파일에 저장하여 사용하는 것이 바람직하다.
     SW 설치 시 사용하는 디폴트 패스워드, 키 등을 사용하는 대신 최초-로그인 모드를 두어 사용자가 직접 강력한 패스워드나 키를 입력하도록 설계한다.


1.   private Connection connection = null;  
2.   private Connection connect(Properties props) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {  
3.       try {  
4.           String url = props.getProperty("url");  
5.           String id = props.getProperty("id");  
6.           String pwd = props.getProperty("passwd");  
7.             
8.           if(url != null && !"".equals(url) && id != null && !"".equals(id) && pwd != null && !"".equals(pwd)) {  
9.               KeyGenerator kgen = KeyGenerator.getInstance("Blowfish");  
10.              SecretKey skey = kgen.generateKey();  
11.              byte[] raw = skey.getEncoded();  
12.              SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish");  
13.                
14.              Cipher cipher = Cipher.getInstance("Blowfish");  
15.              cipher.init(Cipher.DECRYPT_MODE, skeySpec);  
16.              byte[] decrypted_pwd = cipher.doFinal(pwd.getBytes());  
17.              pwd = new String(decrypted_pwd);  
18.              connection = DriverManager.getConnection(url, id, pwd);  
19.          }  
20.            
21.      } catch(SQLException e) {  
22.          /* Exception Control */  
23.      }  
24.        
25.      /* do something */  
26.      return connection;  
27.  }  

댓글 없음:

댓글 쓰기