|
이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
|
번역
원본
|
XML Serialization 소개
참고
|
|---|
|
|
-
XmlSerializer 는 C# 파일(.cs)을 만들어서 TEMP 환경 변수에 의해 이름 지정된 디렉터리의 .dll 파일로 컴파일합니다. 이 DLL을 사용하여 serialization이 수행됩니다.
참고
이러한 serialization 어셈블리는 SGen.exe 도구를 사용하여 미리 생성하고 서명할 수 있습니다. 웹 서비스의 서버에는 작동하지 않습니다. 즉, 클라이언트 및 수동 serialization 전용입니다. 코드 및 DLL은 생성 및 컴파일 시점에서 악의적 프로세스에 취약합니다. Microsoft Windows NT 4.0 이상을 실행하는 컴퓨터에서 사용할 때는 둘 이상의 사용자가 TEMP 디렉터리를 공유할 수 있습니다. 두 계정의 보안 권한이 서로 다르고 높은 권한의 계정이 XmlSerializer를 사용하여 응용 프로그램을 실행하는 경우 TEMP 디렉터리를 공유하는 것이 위험합니다. 이 경우 한 사용자가 컴파일된 .cs 또는 .dll 파일을 바꿔 컴퓨터의 보안을 침해할 수 있습니다. 이런 문제를 방지하기 위해 항상 컴퓨터의 각 계정마다 자체 프로필을 사용하도록 하십시오. 기본적으로 TEMP 환경 변수는 각 계정마다 서로 다른 디렉터리를 가리킵니다. -
악의적 사용자가 XML 데이터의 연속 스트림을 웹 서버에 전송하면(서비스 거부 공격) XmlSerializer는 컴퓨터 리소스가 부족해질 때까지 데이터를 계속 처리합니다. IIS(인터넷 정보 서비스)를 실행하는 컴퓨터를 사용하여 응용 프로그램이 IIS 내에서 실행되는 경우에는 이러한 종류의 공격이 제거됩니다. IIS에는 설정된 길이(기본값은 4KB)보다 긴 스트림은 처리하지 않는 기능이 있습니다. IIS를 사용하지 않는 응용 프로그램을 만들고 XmlSerializer로 deserialize하는 경우에는 서비스 거부 공격을 차단하는 이와 비슷한 기능을 구현해야 합니다. -
XmlSerializer 에서는 데이터를 serialize하고 주어진 모든 형식을 사용하여 코드를 실행합니다. 악의적 개체가 위협을 초래하는 방법에는 두 가지가 있습니다. 즉, 악의적 코드를 실행하거나 XmlSerializer에서 만들어진 C# 파일에 악의적 코드를 삽입할 수 있습니다. 첫 번째 경우 악의적 개체가 안전하지 않은 절차의 실행을 시도하면 코드 액세스 보안이 이러한 행위로 인한 손상 예방에 도움을 줍니다. 두 번째 경우 이론적으로는 악의적 개체가 XmlSerializer에서 만들어진 C# 파일에 코드를 삽입할 수 있는 가능성이 있습니다. 이 문제는 철저하게 검사되었고 이러한 공격이 수행될 가능성도 거의 없지만 알려지지 않은 형식과 신뢰할 수 없는 형식으로 데이터를 serialize하지 않아야 합니다. -
serialize된 중요한 데이터가 취약할 수 있습니다. XmlSerializer 에서 데이터를 serialize한 후 XML 파일이나 다른 데이터 저장소에 이를 저장할 수 있습니다. 데이터 저장소를 다른 프로세스가 사용할 수 있거나 인트라넷 또는 인터넷에서 볼 수 있는 경우에는 데이터가 도난당하여 해로운 목적으로 사용될 수 있습니다. 예를 들어 신용카드 번호가 포함된 주문을 serialize하는 응용 프로그램을 만드는 경우에는 데이터가 매우 중요합니다. 이런 문제를 방지하기 위해 항상 데이터 저장소를 보호하고 공개되지 않도록 조치를 취해야 합니다.
<OrderForm>
<OrderDate>12/12/01</OrderDate>
</OrderForm>
-
공용 클래스의 공용 읽기/쓰기 속성 및 필드 -
ICollection 또는 IEnumerable을 구현하는 클래스
참고
public 속성이 아니라 컬렉션만 serialize됩니다. -
XmlElement 개체 -
XmlNode 개체 -
DataSet 개체
-
필드 또는 속성을 특성 또는 요소로 인코딩할 것인지 여부를 지정합니다. -
사용할 XML 네임스페이스를 지정합니다. -
필드 또는 속성 이름이 부적절한 경우 요소 또는 특성의 이름을 지정합니다.
-
Sgen.exe 도구는 최적의 성능을 위해 serialization 어셈블리를 생성하도록 디자인되었습니다. -
serialize된 데이터에는 데이터 자체와 클래스의 구조만 포함됩니다. 형식 ID와 어셈블리 정보는 포함되지 않습니다. -
public 속성 및 필드만 serialize될 수 있습니다. 속성에는 public 접근자(get 및 set 메서드)가 있어야 합니다. 공용이 아닌 데이터를 serialize해야 하는 경우에는 XML serialization이 아닌 DataContractSerializer 클래스를 사용하십시오. -
클래스에는 XmlSerializer에 의해 serialize될 기본 생성자가 있어야 합니다. -
메서드는 serialize될 수 없습니다. -
XmlSerializer 는 다음과 같이 특정 요구 사항을 충족하는 경우 IEnumerable 또는 ICollection을 서로 다르게 구현하는 클래스를 처리할 수 있습니다. IEnumerable 을 구현하는 클래스는 단일 매개 변수를 취하는 공용 Add 메서드를 구현해야 합니다. Add 메서드의 매개 변수는 GetEnumerator 메서드에서 반환된 IEnumerator.Current 속성에서 반환된 형식과 일관되어야 합니다(다형성). IEnumerable (예: CollectionBase) 이외에 ICollection을 구현하는 클래스에는 정수를 받는 공용 Item이 인덱싱된 속성(C#에서는 인덱서)이 있어야 하며 integer 형식의 공용 Count 속성이 있어야 합니다. Add 메서드로 전달되는 매개 변수는 Item 속성에서 반환된 형식과 같거나, 해당 기본 형식 중 하나여야 합니다. ICollection 을 구현하는 클래스의 경우, serialize되는 값은 GetEnumerator를 호출하는 대신 인덱싱된 Item 속성에서 검색됩니다. 또한 다른 컬렉션 클래스(ICollection을 구현하는 클래스)를 반환하는 public 필드를 제외하고 public 필드와 속성은 serialize되지 않습니다. 예제를 보려면 XML Serialization 예제를 참조하십시오.