Wie man nicht vertrauenswürdiges HTML sicher lädt und in Python konvertiert – Sandboxing

Warum Sandboxing wichtig ist

Beim Umgang mit externem HTML-Inhalt besteht immer das Risiko unvorhersehbaren Verhaltens von Skripten oder Medien innerhalb der Seite. Aspose.HTML for Python via .NET bietet einen Sandboxing-Mechanismus, der es Ihnen ermöglicht zu kontrollieren, welche Elemente des Dokuments während der Verarbeitung ausgeführt oder geladen werden können. Dies gewährleistet sicheres, vorhersehbares und effizientes HTML-Rendering und Konvertierung.

Die meisten HTML-Verarbeitungsszenarien, wie das Konvertieren von HTML in PDF oder Bilder, erfordern keine JavaScript-Ausführung oder die Verwendung von Remote-Inhalten. Der Zugriff auf solche Ressourcen zu erlauben, kann den Prozess verlangsamen oder sogar unerwünschtes Verhalten verursachen. Mit Sandbox-Flags können Sie Ressourcentypen wie Skripte, Bilder, Plugins, Formulare usw. explizit deaktivieren oder einschränken. Dies gibt Ihnen feingranulare Kontrolle darüber, was Ihr Dokument während des Renderings oder der Konvertierung tun kann.

Blockieren der JavaScript-Ausführung

Das folgende Beispiel zeigt, wie man JavaScript beim Konvertieren von HTML in PDF deaktiviert. Dies stellt sicher, dass keine Skripte während des Renderings ausgeführt werden – ideal für sichere Konvertierungen in PDF oder andere Formate.

  1. Initialisieren Sie eine Instanz der Configuration-Klasse.
  2. Setzen Sie das Sandbox-Flag der Konfigurationsinstanz, um den Sandbox.SCRIPTS-Wert einzuschließen. Dies markiert Skripte als nicht vertrauenswürdige Ressourcen innerhalb der Sandbox-Umgebung. Dieser Schritt ist entscheidend, da Skripte ein potenzielles Risiko bei der Ausführung von schädlichem Code darstellen.
  3. Erstellen Sie eine Instanz der HTMLDocument-Klasse mit dem HTMLDocument(address, configuration)-Konstruktor, der den HTML-Dateipfad und die Konfigurationsinstanz nimmt.
  4. Rufen Sie die Converter.convert_html()-Methode auf, um HTML in PDF zu konvertieren.
 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)

Ergebnis: Jeglicher JavaScript innerhalb des HTML-Dokuments wird ignoriert, was eine statische und sichere Ausgabe erzeugt.

Blockieren nicht vertrauenswürdiger Bilder

Befolgen Sie diese einfachen Schritte, um das Laden von Bildern zu deaktivieren und HTML sicher mit Aspose.HTML for Python via .NET in PDF zu konvertieren:

  1. Bereiten Sie HTML-Code vor und speichern Sie ihn in einer Datei. Der HTML-Code enthält ein <span>-Element mit einem Inline-Stil, der ein Hintergrundbild von der URL setzt.
  2. Erstellen Sie eine Konfigurationsinstanz. Dazu initialisieren Sie die Configuration-Klasse, um benutzerdefinierte Sicherheitseinstellungen für Ihr HTML-Dokument zu definieren.
  3. Setzen Sie das Sandbox.IMAGES-Flag in der Konfiguration, um alle Bilder als nicht vertrauenswürdige Ressourcen zu markieren.
  4. Initialisieren Sie das HTML-Dokument. Laden Sie die gespeicherte HTML-Datei mit der benutzerdefinierten Konfiguration. Die Sandbox-Einschränkungen werden automatisch während des Ladens angewendet.
  5. Verwenden Sie die Converter.convert_html()-Methode, um das Dokument zu rendern und es als PDF-Datei zu speichern.
 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)

Ergebnis: Bilder von externen URLs werden nicht geladen, und die Ausgabe-PDF enthält nur statischen Textinhalt.

Häufig gestellte Fragen

1. Welche Sandbox-Optionen sind verfügbar?

Aspose.HTML bietet mehrere Sandbox-Flags, die Sie kombinieren können, wie z.B.:

2. Wie verbessert Sandboxing die Leistung?

Durch das Überspringen der Ausführung von Skripten und das Verhindern von Netzwerkanfragen für externe Ressourcen reduziert Sandboxing die Verarbeitungszeit und Ressourcennutzung während der Konvertierung erheblich.

3. Wie kann ich mehrere Sandbox-Einschränkungen kombinieren?

Sie können mehrere Einschränkungen gleichzeitig aktivieren, zum Beispiel:

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

Diese Zeile deaktiviert sowohl die JavaScript-Ausführung als auch das Laden von Bildern in einer einzigen Konfiguration.

4. Ist Sandboxing für andere Sprachen verfügbar?

Ja. Die gleiche Funktionalität ist in Aspose.HTML for .NET und Aspose.HTML for Java verfügbar, mit ähnlichen APIs zur Verwaltung von Sandbox-Einschränkungen.

5. Was sind häufige Anwendungsfälle für Sandboxing?

Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.