Проблема проверки XML с DTD в C # - PullRequest
1 голос
/ 21 декабря 2009

Это беспокоило меня пару дней. Я пытаюсь загрузить XML из загруженного файла в объект XmlDocument и получить следующий желтый экран смерти:

For security reasons DTD is prohibited in this XML document. To enable DTD processing set the ProhibitDtd property on XmlReaderSettings to false and pass the settings into XmlReader.Create method.

Вот мой код. Вы можете ясно видеть, что я устанавливаю ProhibitDtd в false.

public static XmlDocument LoadXml(FileUpload fu)
{
    var settings = new XmlReaderSettings
                       {
                           ProhibitDtd = false, 
                           ValidationType = ValidationType.DTD
                       };
    var sDtdPath = string.Format(@"{0}", HttpContext.Current.Server.MapPath("/includes/dtds/2.3/archivearticle.dtd"));
    settings.Schemas.Add(null, sDtdPath);

    var r = XmlReader.Create(new StreamReader(fu.PostedFile.InputStream), settings);
    var document = new XmlDocument();
    document.Load(r);
    return document;
}

1 Ответ

2 голосов
/ 22 декабря 2009

Добавьте XmlResolver=null к вашему XmlReaderSettings. Это предотвратит попытку xmlDocument получить доступ к DTD. Если вам нужно проверить, сделайте это в отдельной операции.

...