Как безопасно загружать и конвертировать ненадежный HTML в Python – Песочница
Почему важна песочница – Sandboxing
При работе с внешним HTML-контентом всегда существует риск непредсказуемого поведения скриптов или медиа-элементов на странице. Aspose.HTML for Python via .NET предоставляет механизм песочницы, который позволяет контролировать, какие элементы документа могут выполняться или загружаться во время обработки. Это обеспечивает безопасный, предсказуемый и эффективный рендеринг и конвертацию HTML.
Большинство сценариев обработки HTML, таких как конвертация HTML в PDF или изображения, не требуют выполнения JavaScript или использования удаленного контента. Разрешение доступа к таким ресурсам может замедлить процесс или даже вызвать нежелательное поведение. Используя флаги песочницы, вы можете явно отключить или ограничить типы ресурсов, такие как скрипты, изображения, плагины, формы и т.д. Это дает вам детальный контроль над тем, что ваш документ может делать во время рендеринга или конвертации.
Блокировка выполнения JavaScript
Следующий пример показывает, как отключить JavaScript при конвертации HTML в PDF. Это гарантирует, что никакие скрипты не будут выполняться во время рендеринга – идеально для безопасных конвертаций в PDF или другие форматы.
- Инициализируйте экземпляр класса Configuration.
- Установите
sandbox flag экземпляра конфигурации, чтобы включить значение
Sandbox.SCRIPTS. Это помечает скрипты как ненадежные ресурсы в среде песочницы. Этот шаг важен, поскольку скрипты представляют потенциальный риск выполнения вредоносного кода. - Создайте экземпляр класса HTMLDocument с помощью конструктора
HTMLDocument(address, configuration), который принимает путь к HTML-файлу и экземпляр конфигурации. - Вызовите метод
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:
- Подготовьте HTML-код и сохраните его в файл. HTML-код содержит элемент
<span>со встроенным стилем, который устанавливает фоновое изображение из URL. - Создайте экземпляр конфигурации. Для этого инициализируйте класс Configuration, чтобы определить пользовательские настройки безопасности для вашего HTML-документа.
- Установите флаг
Sandbox.IMAGESв конфигурации, чтобы пометить все изображения как ненадежные ресурсы. - Инициализируйте HTML-документ. Загрузите сохраненный HTML-файл с использованием пользовательской конфигурации. Ограничения песочницы автоматически применятся во время загрузки.
- Используйте метод
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, которые вы можете комбинировать, например:
Sandbox.SCRIPTS– Отключает выполнение JavaScript.Sandbox.IMAGES– Блокирует загрузку внешних изображений.Sandbox.NAVIGATION– Предотвращает редиректы или попытки навигации.Sandbox.FORMS– Отключает отправку форм и связанную активность.Sandbox.PLUGINS– Предотвращает создание плагинов контентом.
2. Как песочница улучшает производительность?
Пропуская выполнение скриптов и предотвращая сетевые запросы для внешних ресурсов, песочница значительно сокращает время обработки и использование ресурсов во время конвертации.
3. Как я могу комбинировать несколько ограничений песочницы?
Вы можете включить несколько ограничений одновременно, например:
configuration.security |= ah.Sandbox.SCRIPTS | ah.Sandbox.IMAGES
Эта строка отключает как выполнение JavaScript, так и загрузку изображений в одной конфигурации.
4. Доступна ли песочница для других языков?
Да. Та же функциональность доступна в Aspose.HTML for .NET и Aspose.HTML for Java, с похожими API для управления ограничениями песочницы.
5. Каковы распространенные случаи использования песочницы?
- Конвертация HTML-писем или веб-страниц из внешних источников;
- Обработка собранных веб-данных без выполнения активного контента;
- Запуск конвертаций в безопасных или офлайн-средах;
- Необходимость улучшить производительность конвертации, пропуская динамические ресурсы.
Вы можете скачать полные примеры и файлы данных с GitHub.