2012-03-06 6 views
2

저는 사용자 이름, 암호, 전자 메일 등과 같은 중요한 데이터를 처리하는 WPF 응용 프로그램을 만들고 있습니다.이 모든 데이터는 응용 프로그램의 텍스트 상자와 암호 상자에 표시됩니다. 응용 프로그램이 닫히면 메모리에 있던 모든 데이터가 삭제되어 나중에 아무도 복구 할 수 없게됩니다.WPF 응용 프로그램의 보안 문제

관심을 기울여야 할 사항이나이 프로젝트를 가능한 안전하게 만들 수있는 기술에 대한 지침이나 정보를 알려주시겠습니까?

는 프로그램 실행이 종료 된 후

+0

데이터가 처음에 어떻게 메모리에 저장 되었습니까? 실행 파일이 끝나면 메모리는 해제됩니다. 클립 보드에 데이터가 있습니까? 디스크에 메모리를 씁니까? 주요 캡처가 걱정 되니? 또는 귀하의 우려는 무엇입니까? –

+0

타이머를 사용하여 클립 보드를 지울 때 디스크에 데이터가 기록되지 않습니다. 걱정할 필요가 없습니다. 그러나 텍스트 상자에있는 데이터가 메모리에 남아있을 수있는 곳을 읽었습니다. – Aaron

+1

@mitte : 응용 프로그램이 실행되는 시간에만 ... –

답변

3

데이터는 메모리에 남아되지 않습니다 감사하지만, 프로그램이 실행되는 동안 이론적으로는 읽을 수 있습니다. 당신은 SecureString의를 사용하여 시도 할 수 : 또한 http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx

에서, PasswordBox 제어가 이미 SecureString 사용, 당신은 그 부분에 좋은 것 때문에.

-1

.Net 문자열은 변경 불가능하며 수용 할 수 없습니다. 불변성은 문자열을 만든 후에 변경할 수 없습니다. Interning은 CLR이 동일한 내용의 문자열 인스턴스 하나를 사용하도록합니다. 문자열을 없애는 것도 어렵게 만듭니다. 공용 언어 런타임 (CLR)이 종료 될 때까지

.. 인턴 String 객체에 할당 된 메모리 MSDN에서 가능성이 는 공개되지 않습니다. 이유는 응용 프로그램 또는 심지어 응용 프로그램 도메인 인 이 종료 된 후에도 내부 String 객체에 대한 CLR의 참조가 지속될 수 있기 때문입니다.

SecureString을 사용할 수 있지만 많은 WPF 컨트롤이 PasswordBox와 별도로 지원하지 않으므로 그리 편리하지 않습니다.

예를 들어 사용자에게 암호를 보여줘야하지만 SecureString을 일반 문자열로 다시 변환하지 않아도되는 경우가 있습니다. 이로 인해 우리가 완화하기 위해 설정 한 문제가 다시 발생합니다.

제 의견으로는 WPF/C#은 민감한 데이터가있는 응용 프로그램에 적합한 언어 프레임 워크가 아닙니다.

+0

왜 downvoted 이유를 설명하십시오. 그런 식으로 모든 사람들이 뭔가를 배웁니다. – Indy9000

1

나는 걱정할 가치가없는 것에 대해 걱정하고 있다고 생각합니다.

누군가가 기기에 물리적으로 접근하여 중요한 정보를 훔치려 고하면 이미 게임을 잃어 버렸습니다.

사용자 이름과 비밀번호가 현재 메모리에 저장되어 있지는 않지만 키로거를 설치하고 다음에 응용 프로그램을 실행할 때 얻을 수 있습니다.

관련 문제