Как безопасно загружать и конвертировать ненадежный 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# How to disable scripts for HTML to PDF conversion using Python
 2
 3import os
 4import aspose.html as ah
 5import aspose.html.converters as conv
 6import aspose.html.saving as sav
 7
 8# Define input and output directories
 9data_dir = "data"
10output_dir = "output"
11os.makedirs(output_dir, exist_ok=True)
12
13# Create an instance of the Configuration class
14with ah.Configuration() as config:
15    # Mark "scripts" as an untrusted resource
16    config.security |= ah.Sandbox.SCRIPTS
17
18    # Initialize an HTML document with the specified configuration
19    html_path = os.path.join(data_dir, "document-with-scripts.html")
20    with ah.HTMLDocument(html_path, config) as doc:
21        # Convert HTML to PDF
22        output_pdf = os.path.join(output_dir, "document-sandbox.pdf")
23        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# Disable loading images in HTML with sandbox configuration using Python
 2
 3import os
 4import aspose.html as ah
 5import aspose.html.converters as conv
 6import aspose.html.saving as sav
 7
 8# Prepare HTML code and save it to a file
 9code = "<span style=\"background-image:url('https://docs.aspose.com/html/images/work/lioness.jpg')\">Hello, World!!</span> " \
10       "<script>document.write('Have a nice day!');</script>"
11
12output_dir = "output"
13os.makedirs(output_dir, exist_ok=True)
14html_path = os.path.join(output_dir, "sandboxing.html")
15output_pdf = os.path.join(output_dir, "sandboxing-out.pdf")
16
17with open(html_path, "w", encoding="utf-8") as file:
18    file.write(code)
19
20# Create an instance of Configuration
21with ah.Configuration() as configuration:
22    # Mark 'IMAGES' as an untrusted resource
23    configuration.security |= ah.Sandbox.IMAGES
24
25    # Initialize an HTML document with the specified configuration
26    with ah.HTMLDocument(html_path, configuration) as document:
27        # Convert HTML to PDF
28        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.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.