Q: 왜 자바의 Swing에서 패스워드에 String 이 아닌, char[]를 이용하나요?
(질문자: Ahamed)
A: String은 immutable 객체입니다. (생성 된 이후 수정할 수 없는 객체) 스트링으로 패스워드를 저장하면, GC가 동작하기 전에는 이것을 삭제할 수 없습니다.
그렇지만, char[]를 이용하면 패스워드 체크를 한 뒤 곧바로 다른 데이터를 거기에 덮어써서, 입력된 패스워드를 제거할 수 있습니다.
물론 이 방법은 공격자가 공격할 여지를 아주 조금 줄이는 정도의 효과밖에 없고, 또한 특정 유형의 공격에만 효합니다.
(답변자: Jon Skeet)
1643 488 | In Swing, the password field has a Why does |
2229 | Strings are immutable. That means once you've created the string, if another process can dump memory, there's no way (aside from reflection) you can get rid of the data before GC kicks in. With an array, you can explicitly wipe the data after you're done with it: you can overwrite the array with anything you like, and the password won't be present anywhere in the system, even beforegarbage collection. So yes, this is a security concern - but even using EDIT: As noted in comments, it's possible that arrays being moved by the garbage collector will leave stray copies of the data in memory. I believe this is implementation-specific - the GC may clear all memory as it goes, to avoid this sort of thing. Even if it does, there's still the time during which the | |||
'StackOverflow ' 카테고리의 다른 글
[HTML] 웹 브라우저에 입력할 수 있는 URL의 길이? (0) | 2015.12.09 |
---|---|
[HTML] bgcolor로 "chucknorris" 를 설정하면 붉은 색이 나오는 이유? (0) | 2015.12.08 |
[C] --> 오퍼레이터를 뭐라고 부르죠? (0) | 2015.12.04 |
[C] C언어에서, 메모리 포인터를 해제하기 전에 캐스팅해야 하는 이유? (0) | 2015.12.04 |
[Javascript] 구글 캘린더나 구글 독스에서 수신한 JSON 데이터에 while(1); 이나 &&START&& 같은 코드가 들어있는 이유 (0) | 2015.11.30 |