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# 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)

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# 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)

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.