[c#] 직렬화 관련 보안 고려사항

C#에서의 직렬화는 데이터를 객체에서 바이트 스트림으로 변환하거나 반대로 변환하는 과정을 말합니다. 하지만 이러한 직렬화 프로세스는 보안 공격에 취약할 수 있습니다. 따라서 C# 개발자들은 코드를 작성할 때 다음과 같은 보안 고려사항을 고려해야 합니다.

1. 민감한 데이터의 보호

직렬화된 데이터에는 민감한 정보가 포함될 수 있습니다. 이러한 데이터를 보호하기 위해, 직렬화되는 객체의 필드를 적절히 검증하고, 중요한 데이터에 대해 보안을 강화해야 합니다.

[Serializable]
class MyClass
{
    [NonSerialized]
    private string sensitiveData;
}

위의 예제에서 NonSerialized 특성은 sensitiveData 필드가 직렬화되지 않도록 합니다.

2. 외부 입력의 검증

직렬화를 통해 외부 입력을 처리할 때, 입력을 검증하여 악의적인 직렬화 데이터의 인젝션을 방지해야 합니다.

BinaryFormatter formatter = new BinaryFormatter();
formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
formatter.TypeFormat = FormatterTypeStyle.TypesWhenNeeded;

위의 예제에서 BinaryFormatter의 속성을 설정하여 악의적인 타입 데이터의 인젝션을 방지합니다.

3. 코드 검사 및 감사

직렬화된 데이터를 처리하는 모든 코드는 검사 및 감사되어야 합니다. 잠재적인 보안 취약점을 발견하고, 조치를 취할 수 있도록 프로세스를 수립해야 합니다.

이러한 고려사항을 준수함으로써, C#에서의 직렬화 과정을 보다 안전하게 수행할 수 있습니다.

참고 자료