Как безопасно загружать и конвертировать ненадежный HTML в Python – Песочница

Почему важна песочница – Sandboxing

При работе с внешним HTML-контентом всегда существует риск непредсказуемого поведения скриптов или медиа-элементов на странице. Aspose.HTML for Python via .NET предоставляет механизм песочницы, который позволяет контролировать, какие элементы документа могут выполняться или загружаться во время обработки. Это обеспечивает безопасный, предсказуемый и эффективный рендеринг и конвертацию HTML.

Большинство сценариев обработки HTML, таких как конвертация HTML в PDF или изображения, не требуют выполнения JavaScript или использования удаленного контента. Разрешение доступа к таким ресурсам может замедлить процесс или даже вызвать нежелательное поведение. Используя флаги песочницы, вы можете явно отключить или ограничить типы ресурсов, такие как скрипты, изображения, плагины, формы и т.д. Это дает вам детальный контроль над тем, что ваш документ может делать во время рендеринга или конвертации.

Блокировка выполнения JavaScript

Следующий пример показывает, как отключить JavaScript при конвертации HTML в PDF. Это гарантирует, что никакие скрипты не будут выполняться во время рендеринга – идеально для безопасных конвертаций в PDF или другие форматы.

  1. Инициализируйте экземпляр класса Configuration.
  2. Установите sandbox flag экземпляра конфигурации, чтобы включить значение Sandbox.SCRIPTS. Это помечает скрипты как ненадежные ресурсы в среде песочницы. Этот шаг важен, поскольку скрипты представляют потенциальный риск выполнения вредоносного кода.
  3. Создайте экземпляр класса HTMLDocument с помощью конструктора HTMLDocument(address, configuration), который принимает путь к HTML-файлу и экземпляр конфигурации.
  4. Вызовите метод Converter.convert_html() для конвертации HTML в PDF.
 1# Disable JavaScript when converting HTML to PDF in Python
 2
 3import os
 4import aspose.html as ah
 5import aspose.html.converters as conv
 6import aspose.html.saving as sav
 7
 8# Prepare input and output paths
 9data_dir = "data"
10output_dir = "output"
11os.makedirs(output_dir, exist_ok=True)
12html_path = os.path.join(data_dir, "document-with-scripts.html")
13output_pdf = os.path.join(output_dir, "document-sandbox.pdf")
14
15# Block scripts and convert HTML to PDF
16with ah.Configuration() as config:
17    config.security |= ah.Sandbox.SCRIPTS
18
19    with ah.HTMLDocument(html_path, config) as doc:
20        conv.Converter.convert_html(doc, sav.PdfSaveOptions(), output_pdf)

Результат: Любой JavaScript внутри HTML-документа будет проигнорирован, создавая статический и безопасный вывод.

Блокировка ненадежных изображений

Выполните эти простые шаги, чтобы отключить загрузку изображений и безопасно конвертировать HTML в PDF с помощью Aspose.HTML for Python via .NET:

  1. Подготовьте HTML-код и сохраните его в файл. HTML-код содержит элемент <span> со встроенным стилем, который устанавливает фоновое изображение из URL.
  2. Создайте экземпляр конфигурации. Для этого инициализируйте класс Configuration, чтобы определить пользовательские настройки безопасности для вашего HTML-документа.
  3. Установите флаг Sandbox.IMAGES в конфигурации, чтобы пометить все изображения как ненадежные ресурсы.
  4. Инициализируйте HTML-документ. Загрузите сохраненный HTML-файл с использованием пользовательской конфигурации. Ограничения песочницы автоматически применятся во время загрузки.
  5. Используйте метод Converter.convert_html() для рендеринга документа и сохранения его как PDF-файла.
 1# Block external images when converting HTML to PDF in Python
 2
 3import os
 4import aspose.html as ah
 5import aspose.html.converters as conv
 6import aspose.html.saving as sav
 7
 8# Prepare output paths
 9output_dir = "output"
10os.makedirs(output_dir, exist_ok=True)
11html_path = os.path.join(output_dir, "sandboxing.html")
12output_pdf = os.path.join(output_dir, "sandboxing-out.pdf")
13
14# Define HTML that references an external image
15code = (
16    "<span style=\"background-image:url('https://docs.aspose.com/html/images/work/lioness.jpg')\">"
17    "Hello, World!!</span> <script>document.write('Have a nice day!');</script>"
18)
19
20# Save the source HTML file
21with open(html_path, "w", encoding="utf-8") as file:
22    file.write(code)
23
24# Block image loading and convert HTML to PDF
25with ah.Configuration() as configuration:
26    configuration.security |= ah.Sandbox.IMAGES
27
28    with ah.HTMLDocument(html_path, configuration) as document:
29        conv.Converter.convert_html(document, sav.PdfSaveOptions(), output_pdf)

Результат: Изображения из внешних URL не будут загружены, и выходной PDF будет содержать только статический текстовый контент.

Часто задаваемые вопросы

1. Какие опции песочницы доступны?

Aspose.HTML предоставляет несколько sandbox flags, которые вы можете комбинировать, например:

2. Как песочница улучшает производительность?

Пропуская выполнение скриптов и предотвращая сетевые запросы для внешних ресурсов, песочница значительно сокращает время обработки и использование ресурсов во время конвертации.

3. Как я могу комбинировать несколько ограничений песочницы?

Вы можете включить несколько ограничений одновременно, например:

configuration.security |= ah.Sandbox.SCRIPTS | ah.Sandbox.IMAGES

Эта строка отключает как выполнение JavaScript, так и загрузку изображений в одной конфигурации.

4. Доступна ли песочница для других языков?

Да. Та же функциональность доступна в Aspose.HTML for .NET и Aspose.HTML for Java, с похожими API для управления ограничениями песочницы.

5. Каковы распространенные случаи использования песочницы?

Вы можете скачать полные примеры и файлы данных с GitHub.