Dienstag, 17. August 2021

Linux - PDF in JPG mit der Befehlszeile/Kommandozeile konvertieren

Wie konvertiert man ein PDF in JPG Dateien? Am Besten mit der Befehlszeile/Kommandozeile unter Linux. Auch in den Artikeln Linux - PDF Dokumente zusammenfügen / Merge PDF files und Linux - PDF Dateien Passwort-Schutz entfernen mit QPDF verwende ich ausschließlich die Kommandozeile.

PDF Datei über die Befehlszeile/Kommandozeile unter Linux in ein JPEG konvertieren

Dies funktioniert sehr gut mit dem Konvertierungsprogramm von ImageMagick

Unter Ubuntu kann man es mit diesem Befehl installieren:
sudo apt-get install imagemagick

Das Konvertieren ist dann mit dem folgenden Befehl möglich:
convert in.pdf out.jpg

Für eine sehr gute Qualität sollte man die folgenden Parameter verwenden:
convert -density 300 -quality 100 in.pdf out.jpg

Kommt es beim Ausführen zu der folgenden Fehlermeldung, muss noch eine Anpassung an der policy.xml erfolgen

convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `Stellungnahme.jpg' @ error/convert.c/ConvertImageCommand/3258.

Dieses Problem kommt durch eine Umgehung für eine Sicherheitslücke. Die Schwachstelle wurde jedoch mit Ghostscript 9.24 (Quelle) behoben. Hat man also diese oder eine neuere Version installiert, kann man "format types" wieder aktivieren.

Daher am Besten vorher noch sicherstellen, dass Ghostscript ≥ 9.24 installiert ist:
gs --version

In der Datei sudo nano /etc/ImageMagick-6/policy.xml die folgenden Zeilen auskommentieren oder entfernen:

<!--
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
-->

Hinweis: Auch unter Windows ist eine Verwendung zum Beispiel mit Hilfe des Windows-Subsystem für Linux (WSL) möglich.

Freitag, 13. August 2021

Security - Click-Jacking-Angriffe vermeiden mittels CSP-Header (Content Security Policy)

Die Content-Security-Policy (CSP) entstand ursprünglich unter dem Namen "Content-Restriction", der Grund dafür war die damals zunehmenden Sicherheitslücken bei Internetskripten wie z.B. durch Cross-Site-Scripting (XSS). In diesem Artikel gehe ich auf die Implementierung des CSP-Frame-Vorfahren ein.


Die Richtlinie "frame-ancestors", legt fest welche Domains die Seite in Frames und iFrames einbauen bzw. einbetten dürfen und funktioniert mit allen aktuellen Browserversionen außer dem Internet Explorer IE. Siehe hierzu auch https://caniuse.com/?search=frame-ancestors oder https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors .

  • "frame-ancestors 'none';" ==> Alle ablehnen
  • "frame-ancestors 'self';" ==> Selber erlaubt, aber alle anderen ablehnen
  • "frame-ancestors 'self' 'shemel.de' 'test.de';" ==> Selber erlaubt, und bestimmte Domains zulassen

Damit der Browser die Content Security Policy anwendet, muss vor der Auslieferung des HTML-Dokuments ein spezieller HTTP-Header gesetzt werden. Hierfür gibt es die folgenden Möglichkeiten:

HTML-Code: <meta>-Element hinzufügen

Wird vom Webserver kein CSP-Header versendet, kann dies mit den den folgenden <meta>-Elementen nachgeholt werden:

<head>
...
  <meta http-equiv="Content-Security-Policy" content="frame-ancestors 'none';">
  <meta http-equiv="X-Content-Security-Policy" content="frame-ancestors 'none';">
  <meta http-equiv="X-WebKit-CSP" content="frame-ancestors 'none';">
...
</head>


Ähnlich funktioniert dies auch bei serverseitigen Scriptsprachen, wie zum Beispiel PHP:

<?php
...
header("Content-Security-Policy: frame-ancestors 'none';");
header("X-Content-Security-Policy: frame-ancestors 'none';");
header("X-WebKit-CSP: frame-ancestors 'none';");
...
?>


Webserver Konfiguration: Apache HTTP

Das Modul mod_headers muss aktiv sein:
a2enmod headers //Enabling module headers.

Anschließend muss die Konfiguration in der httpd.conf angepasst werden:
Header set Content-Security-Policy "frame-ancestors 'none';"

Nach dem Speichern der Datei muss der Apache Webserver neu gestartet werden.

Sonntag, 1. August 2021

Chrome Browser - Screenshot von Webseiten in voller Größe (full-page) aufnehmen

Chromium basierte Browser bieten für die Aufnahme von Webseiten ein integriertes Tool für ganzseitige Screenshots. In diesem Beitrag beschreibe ich, wie man einen ganzseitigen Screenshot in Chrome erstellen kann, ohne eine Erweiterung oder ein Drittanbieter-Tool auf einem Windows-PC installieren zu müssen.

Mit Hilfe der Entwicklertools von Chrome lassen sich Screenshot aufnehmen:

  1. Chrome-Browser starten
  2. Öffne der Entwicklertools (Strg + Umschalt + I)
  3. "Run command" auswählen (Strg + Umschalt + P)

  4. In dem Feld "Capture full size screenshot" oder "Screenshot" eingeben und bestätigen
 

Chrome speichert jetzt automatisch einen (ganzseitigen) Screenshot im "Downloads" Ordner ab.