본문 바로가기
프로그래밍/C#

C# XML 내용 안전하게 읽기

by zoo10 2018. 2. 28.

XML 파일을 로드 시도하는 부분에 보안 이슈가 있어서 처리한 내용

XML 파일을 검증 없이 로드하다가 공격 코드에 노출될 수 있어서 처리한 함수

public static Stream GenerateStreamFromString(string s)

{

    MemoryStream stream = new MemoryStream();

    StreamWriter writer = new StreamWriter(stream);

    writer.Write(s);

    writer.Flush();

    stream.Position = 0;

    return stream;

}



public static XmlDocument XmlLoadIgnoreDTD(string xml)

{

    Stream stream = GenerateStreamFromString(xml);

    XmlDocument xmlDoc = new XmlDocument();

    try

    {

        XmlReaderSettings settings = new XmlReaderSettings();

        settings.ProhibitDtd = false;

        settings.XmlResolver = null;

        XmlReader reader = XmlReader.Create(stream, settings);

        xmlDoc.Load(reader);

    }

    catch (Exception x)

    {

        return xmlDoc;

    }

    finally

    {

        stream.Close();

    }

    return xmlDoc;

}