Мы рады объявить о выпуске GroupDocs.Annotation for .NET 26.10, выпущенном в октябре 2026 года. Это релиз, ориентированный на безопасность: документы больше не загружают удалённые изображения, таблицы стилей или связанные файлы самостоятельно, а новые члены LoadOptions позволяют точно определить, что может быть загружено. Релиз также обновляет базовые движки документов, обновляет уязвимую зависимость и исправляет несколько проблем.
Что нового в этом релизе
| Ключ | Категория | Краткое описание |
|---|---|---|
| ANNOTATIONNET-2663 | ⚠️ Enhancement | Внешние ресурсы больше не загружаются по умолчанию (новые элементы управления LoadOptions) |
| ANNOTATIONNET-2687 | ✨ Enhancement | Обновление базовых движков документов |
| ANNOTATIONNET-2672 | 🔒 Security | Обновление System.Security.Cryptography.Pkcs до 8.0.2 (CVE-2026-84008 / CVE-2026-70162) |
| ANNOTATIONNET-2102 | 🔧 Fix | Исправление FileTypeNotSupportedException при извлечении аннотаций из EML‑документов |
| ANNOTATIONNET-1903 | 🔧 Fix | Исправление невозможности открыть документы, аннотированные старыми версиями, в .NET 8 |
| ANNOTATIONNET-2689 | 🔧 Fix | Исправление потери поворота страницы PDF на 90 градусов при сохранении |
Внешние ресурсы больше не загружаются по умолчанию
Документ может ссылаться на ресурсы за пределами себя: <img src="https://..."> в HTML‑странице или теле письма, связанное изображение в документе Word, удалённая таблица стилей или внешняя ссылка на книгу Excel. До сих пор при открытии, предварительном просмотре или сохранении такого документа GroupDocs.Annotation запрашивал эти ресурсы из сети или файловой шаре.
На сервере, обрабатывающем недоверенные документы, это представляет риск server-side request forgery (SSRF): документ может заставить сервер обращаться к внутренним адресам, а путь UNC может раскрыть учётные данные Windows процесса.
Начиная с версии 26.10, внешние ресурсы по умолчанию пропускаются для документов обработки текста, HTML, электронной почты, презентаций и электронных таблиц:
- Без запросов. Не выполняется ни сетевой, ни запрос к файловой шаре для ресурсов, на которые ссылается документ, в любой операции:
Get,Add,Save,GeneratePreviewиGetDocumentInfo. - Пустые заполнители. Пропущенное изображение отображается как прозрачный заполнитель, а оригинальная ссылка сохраняется в документе.
- Встроенный контент по‑прежнему работает. Части
cid:в письме, URIdata:и встроенные изображения всегда загружаются. - Аннотации изображений не затронуты.
ImageAnnotation.ImagePathпо‑прежнему загружается из URL.
Это изменение поведения. Если ваши документы зависят от отображения удалённых изображений или таблиц стилей, разрешите их явно с помощью новых членов LoadOptions:
| Член | По умолчанию | Описание |
|---|---|---|
SkipExternalResources |
true |
Пропускать внешние ресурсы. Установите false, чтобы восстановить поведение до версии 26.10. |
WhitelistedResources |
empty | Имена хостов или абсолютные префиксы URI, которые загружаются даже когда ресурсы пропускаются. |
ExternalResourceHandler |
null |
Вызывается для каждого внешнего ресурса; может разрешить его, пропустить или предоставить его содержимое. |
Разрешать только доверенные хосты (рекомендовано):
LoadOptions loadOptions = new LoadOptions
{
// SkipExternalResources stays true (the default)
WhitelistedResources = { "cdn.example.com", "https://intranet.example.com/images/" }
};
using (Annotator annotator = new Annotator("input.html", loadOptions))
{
annotator.Save("output.html"); // only images from the two whitelisted locations are loaded
}
Проверяйте, разрешайте или заменяйте каждый ресурс с помощью обработчика:
class AuditingResourceHandler : ExternalResourceHandler
{
public override void OnLoading(ExternalResourceLoadingArgs args)
{
Console.WriteLine($"{args.Uri}: {(args.Skipped ? "skipped" : "loaded")}");
// serve a local copy instead of going to the network
if (args.Uri == "https://example.com/logo.png")
args.Data = File.ReadAllBytes("logo.png");
}
}
Обновлённые движки документов
Встроенные движки обработки текста, электронных таблиц, презентаций, PDF, диаграмм, электронной почты, изображений, CAD и графики обновлены до октябрьских выпусков 2026 года. Сгенерированные заново документы и предварительные просмотры страниц могут незначительно отличаться на уровне байтов или пикселей, оставаясь визуально эквивалентными.
Для проектов .NET 6 и .NET 8 пакеты времени выполнения теперь зависят от SkiaSharp 4.152.1. Если ваш проект напрямую ссылается на SkiaSharp 3.x, обновите его до 4.x.
Обновление безопасности
Движки документов включают System.Security.Cryptography.Pkcs версии 8.0.0 или 8.0.1, которые уязвимы к CVE-2026-84008 и CVE-2026-70162. GroupDocs.Annotation теперь ссылается на исправленную 8.0.2 для всех целевых платформ. Изменения кода не требуются.
Исправления
- EML из потока. Сообщение EML, начинающееся с
MIME-Version: 1.0, определялось как архив MHT, и открытие его из потока вызывалоFileTypeNotSupportedException. Теперь такие сообщения открываются одинаково из потока и из файла, и файлы MHT теперь поддерживаются как документы электронной почты. - Старые документы в .NET 8. Документы, аннотированные версиями до 26.6, не открывались в .NET 8 с
NotSupportedException. Теперь они открываются: устаревшие аннотации пропускаются с предупреждением в журнале, а новые аннотации можно добавить и сохранить. Связанная проблема с повторно сохранёнными презентациями (PPTX), у которых аннотации не читались, исправлена во всех платформах. - Поворот PDF на 90 градусов. Поворот страницы PDF с помощью
Annotator.Rotationработал для 180 и 270 градусов, но поворот на 90 градусов терялся при сохранении. Теперь он сохраняется для любого угла:
using (Annotator annotator = new Annotator("input.pdf"))
{
annotator.ProcessPages = 1; // the page to rotate
annotator.Rotation = RotationDocument.on90; // previously ignored
annotator.Save("output.pdf");
}
Изменения публичного API
В релизе добавлены следующие члены:
LoadOptions.SkipExternalResourcesLoadOptions.WhitelistedResourcesLoadOptions.ExternalResourceHandlerExternalResourceHandlerclassExternalResourceLoadingArgsclass
Никакие публичные члены не были удалены или изменены.
Как получить обновление
NuGet
Установите или обновите до GroupDocs.Annotation 26.10.0 с помощью NuGet. Пакет автоматически подбирает пакет времени выполнения для вашей целевой платформы (.NET Framework 4.6.2, .NET 6 или .NET 8):
dotnet add package GroupDocs.Annotation --version 26.10.0
Прямое скачивание
Скачайте релиз со страницы GroupDocs.Annotation for .NET 26.10.