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.
- Initialisieren Sie eine Instanz der Configuration-Klasse.
- 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. - Erstellen Sie eine Instanz der HTMLDocument-Klasse mit dem
HTMLDocument(address, configuration)-Konstruktor, der den HTML-Dateipfad und die Konfigurationsinstanz nimmt. - 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:
- 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. - Erstellen Sie eine Konfigurationsinstanz. Dazu initialisieren Sie die Configuration-Klasse, um benutzerdefinierte Sicherheitseinstellungen für Ihr HTML-Dokument zu definieren.
- Setzen Sie das
Sandbox.IMAGES-Flag in der Konfiguration, um alle Bilder als nicht vertrauenswürdige Ressourcen zu markieren. - 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.
- 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.:
Sandbox.SCRIPTS– Deaktiviert die JavaScript-Ausführung.Sandbox.IMAGES– Blockiert das Laden externer Bilder.Sandbox.NAVIGATION– Verhindert Weiterleitungen oder Navigationsversuche.Sandbox.FORMS– Deaktiviert Formularübermittlung und verwandte Aktivität.Sandbox.PLUGINS– Verhindert, dass Inhalte Plugins instanziieren.
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?
- Konvertieren von HTML-E-Mails oder Webseiten aus externen Quellen;
- Verarbeiten von gescrapten Webdaten ohne Ausführung von aktivem Inhalt;
- Ausführen von Konvertierungen in sicheren oder Offline-Umgebungen;
- Notwendigkeit, die Konvertierungsleistung durch Überspringen dynamischer Ressourcen zu verbessern.
Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.