비밀번호를 일반 문자열에 담고 처리하다가 발생할 수 있는 보안 이슈에 대응하기 위해 SecureString을 사용함
아래와 같은 문제가 발생할 수 있음
문자열에 노출되지 않아야 할 정보를 담고 처리하지 말아야 한다.
메모리를 읽을 수 있으면 그대로 노출된다.
메모리에서 디스크로 교체되면 암호화 되지 않은 내용이 스왑 파일에 남음
가비지에 의해 제거되지 않고 남은 상황에서 응용프로그램이 비정상 종료될 경우 메모리 덤프에 민감 정보가 포함될 수 있음
//String -> SecureString
public static SecureString ConvertStringToSecureString(string str)
{
var secureStr = new SecureString();
if (str.Length > 0)
{
foreach (var c in str.ToCharArray()) secureStr.AppendChar(c);
}
return secureStr;
}
//SecureString->String
public static string ConvertSecureStringToString(SecureString sec_str)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(sec_str);
return Marshal.PtrToStringUni(unmanagedString);
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
}
}
적절하게 사용하자.
'프로그래밍 > C#' 카테고리의 다른 글
자바스크립트 CryptoJS.HmacSHA256를 C# HMACSHA256 클래스 대응 (0) | 2021.10.28 |
---|---|
C# WEB URL로 PDF 다운받아 Base64문자열 변환하기 (0) | 2021.02.17 |
C# XML 내용 안전하게 읽기 (0) | 2018.02.28 |
C# 파일명 유효성 체크 (0) | 2018.02.26 |
C# 파일 경로 유효성 체크 (0) | 2018.02.26 |
C# 싱글톤 패턴 예제 모음 (2) | 2018.02.21 |
C# DataGridView 에서 선택된 DataRow 꺼내기 (0) | 2018.01.11 |
C# 일정 범위 내에 IP 체크하기 (0) | 2017.11.09 |