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. }
댓글 없음:
댓글 쓰기