본문 바로가기
Java

Java String 활용한 로그인 보안

by 신입같은 3년차 2017. 7. 15.

안행부 시큐어 코딩 가이드 로그인를 따라 예제를 작성했습니다.

 

대부분의 로그인구현을보면 id와 password를 String로 받는것을 볼 수 있다.

 

생성자에서 id와 비밀번호를 입력받으면 String 객체로된 값이 Heap영역에 올라가게되는데. 이경우

 

id 와 pw의 참조변수값을 null로 바꿔주어도 gc가 언제 수행할지 몰라 데이터 유실의 위험이 있다고 한다.

 

이경우 System.gc()를 호출하고나 . id와 pw의 값을 다른값으로 바꿔주면 된다고 생각할 수 있다. ( 저도 처음에는 그런 생각을 했습니다 )

 

하지만 System.gc()의 경우 gc를 실행한다기 보다는 순서를 앞당긴다는 표현이 맞다고 합니다.

 

또한 id와 pw의 값을 바꾼다고해도 String 의 값을 변경하는것은 기존에있던 객체의 값을 바꾼다기보다는 새로운 String 객체를 만들어내 그 String 객체를 참조하는것이라 Heap영역에는 아직 전에 썼던

 

String 객체가 남아있습니다. 따라서 아래 와 같이 문자배열로 선언해 입력을 받을때 nextLine()으로 입력받아 toCharArray()를통해 문자 배열로 저장후

 

사용한다음에 배열의 값들을 공백으로 처리해줍니다.

 

저도 국비지원을 통한 수업으로 알게되었습니다. 자세한 내용은 안행부 시큐어 코딩 가이드를 직접 읽어 보고 틀린부분은 수정, 부족한 부분은 채워 넣겠습니다.

 

import java.util.Arrays;
import java.util.Scanner;

/**
 * String 활용 
 *
 */
public class String {
	public static void main(String[] args) {
		Login l = new Login();
		while(true) ;
		
	} // end of main
} // end of class


class Login{
	char[] id;
	char[] pw;
//	String id = "";
//	String pw = "";

	
	public Login() {
		
		// TODO Auto-generated constructor stub
		Scanner scan = new Scanner(System.in);
		System.out.println("아이디와 비밀번호를 입력하세요.");
		id = scan.nextLine().toCharArray();
		pw = scan.nextLine().toCharArray();
		
		Arrays.fill(id, ' '); // 배열의 각각의 원소의 내용을 두번째 인자로 모두채우기
		Arrays.fill(pw, ' '); // 배열의 각각의 원소의 내용을 두번째 인자로 모두채우기
		
		id = null;
		pw = null;
	}
}

반응형

댓글