WordPress SVG Upload erlauben („Du bist leider nicht berechtigt, diesen Dateityp hochzuladen“)

WordPress erlaubt in der Standardkonfiguration leider bis heute noch keine Verwendung von SVG-Bildern in der Mediathek. Versucht man eine SVG-Datei hochzuladen erscheint der Fehler „<Name>konnte nicht hochgeladen werden. Du bist leider nicht berechtigt, diesen Dateityp hochzuladen.“

Das hat natürlich auch einen Grund: SVGs sind ja XML-Dateien mit potenziell ausführbarem JS-Inhalt. Die „falsche“ SVG Datei könnte, genau wie eine „falsche“ JS oder HTM* Datei möglicherweise Schaden anrichten.

Unverständlicherweise gibt es bis heute aber noch keine „offizielle“ Möglichkeit, SVGs in seinem eigenen privaten Blog zu erlauben.

Lösung

In der functions.php des aktuell verwendeten Themes kann man den Filter einfach umgehen.

<?php
/* SVG erlauben - the old way */
function kb_svg ( $svg_mime ){
	$svg_mime['svg'] = 'image/svg+xml';
	return $svg_mime;
}
add_filter( 'upload_mimes', 'kb_svg' );

/* SVG erlauben - the new way (WP 4.7+) */
function kb_ignore_upload_ext($checked, $file, $filename, $mimes){
if(!$checked['type']){
	$wp_filetype = wp_check_filetype( $filename, $mimes );
	$ext = $wp_filetype['ext'];
	$type = $wp_filetype['type'];
	$proper_filename = $filename;

	if($type && 0 === strpos($type, 'image/') && $ext !== 'svg'){
		$ext = $type = false;
	}

	$checked = compact('ext','type','proper_filename');
}

return $checked;
}
add_filter('wp_check_filetype_and_ext', 'kb_ignore_upload_ext', 10, 4);
?>

Natürlich sollte das nicht so sein, ein Theme sollte nicht die Sicherheitsfunktion des WordPress-Systems verbiegen müssen. Leider ist das bisher der schnellste Weg für Admins um SVG-Grafiken zu erlauben.

Firefox zeigt keine SSL-Seiten an mit dem Fehler „ssl_error_weak_server_ephemeral_dh_key“

Problem

firefox_ssl_error_weak_server_ephemeral_dh_keyFirefox ab Version 39 zeigt viele SSL-gesicherte Seiten nicht mehr an und gängelt den erfahrenen Admin stattdessen mit dieser Meldung:

Fehler: Gesicherte Verbindung fehlgeschlagen

Ein Fehler ist während einer Verbindung mit foo.bar aufgetreten. SSL hat einen schwachen
kurzlebigen Diffie-Hellman-Schlüssel in der Handshake-Nachricht "Server-Schlüsselaustausch"
empfangen. (Fehlercode: ssl_error_weak_server_ephemeral_dh_key)

Das bedeutet, das die anzuzeigende Seite gegen die Logjam-Attacke auf SSL verwundbar ist. Im Prinzip soll der DH-Schlüsseltausch PFS liefern, in einigen Implementierungen ist das Protokoll allerdings angreifbar. Die notwendige Sicherheit auf dem initialen Schlüsselaustausch liefern nur Schlüssellängen von 512bits und mehr, die anzuzeigende Seite möchte aber weniger. Das betriff viele Fritz! Boxen („fritz.box“), Speedport-Router der Telekom („speedport.ip“) und ähnliche Geräte.

Blöderweise liefert viel Hardware und viele Infrastrukturkomponenten die jeweiligen Web-GUIs mit so einer SSL-Konfiguration aus. Dazu zählen EMC, Nimble, HP, IBM, NetAPP, Cisco und fast jeder andere. Da Firmware-Updates an solchen kritischen Punkten oft etwas länger brauchen, benötigen Admins hier eine Lösung (abgesehen von der Wwahl, Chrome oder Edge zu nutzen).

Lösung

firefox-sslv3-fehler-gesicherte-seitenFirefox hat SSLv3 zum Glück noch nicht verlernt, sondern nur dekativiert:

  1. „about:config“ in der Adresszeile öffnen (und Warnung wegklicken)
  2. Suche nach „security.ssl3.
  3. Die beiden Einträge „security.ssl3.dhe_rsa_aes“ zu 128 und 265bit mittels Doppelklick auf „false“ stellen.

WordPress und Word 2010 („Der Beitrag konnte nicht veröffentlicht werden“)

Wenn man einen Blogbeitrag aus Word veröffentlichen möchte und sich wundert warum trotz erfolgreicher Registrierung des WordPress-Kontos in Microsoft Word das Ganze nicht so recht funktionieren will („Der Beitrag konnte nicht veröffentlicht werden“) sollte man sich seine Office Templates in den Gruppenrichtlinien (GPO) nochmal genau anschauen. Die verursachende Einstellung dafür befindet sich unter Microsoft Word 2010 -> Word-Optionen -> Speichern ->Standarddateiformat. Word 2010 kann nur in WordPress veröffentlichen, wenn das Standard-Dateiformat nicht auf das alte Office-format geändert wurde. Ist das Standarddateiformat auf „*.doc“ eingestellt, wird in der lokalen Registry ein Eintrag gesetzt: REG_SZ „DefaultFormat“ mit dem Wert „doc“. Dieser befindet sich entweder unter: HKCUSoftwareMicrosoftOffice14.0WordOptions oder HKCUSoftwarePoliciesMicrosoftoffice14.0wordoptions Die Lösung: Entweder ändert man den Wert auf „*.docx“ direkt in der Registry (und schaltet die entsprechende Richtlinie ab), oder ändert seine GPO dementsprechend. Nach dem nächsten Word-Start passt schon alles. Danke an den Dariusz G. für den Schnipsel und die aufwändige Recherche dazu. Wir hoffen das dieser Artikel anderen Administratoren bei diesem fies zu suchenden Fehler weiterhilft.

C# aspx – Firefox meldet XML-Verarbeitungsfehler und Seite im Internet Explorer bleibt leer

Wenn man mit aspx (zum Beispiel C#) eine Datei zum Download ausliefern will, kann es vorkommen, dass im Firefox folgende Meldung erscheint:

XML-Verarbeitungsfehler: Kein Element gefunden

Adresse: http://xyz/download.aspx

Zeile Nr. 1, Spalte 1:

^

Während im Internet Explorer die Seite einfach komplett leer/weiß bleibt.

Folgende zwei Ansätze sind meist der Grund für diesen Fehler.

#1 – Fehlender ASP-Dokumentenheader in der aspx-Datei

<%@ Page Language=“C#“ AutoEventWireup=“true“ CodeFile=“download.aspx.cs“ Inherits=“download“ %>

Wenn die obige Zeile nicht in der aspx-Datei enthalten ist (Dateiname der Codedatei und Name des dortigen Namespaces entsprechend anpassen), weil man ja keinen Inhalt der aspx-Datei im binären Downloadstream haben will, dann führt ASP die vielleicht vorhandene Codedatei gar nicht erst aus. Um dies zu lösen, muss man also einfach nur die obige Zeile einfügen und anpassen.

#2 – Dateipfad falsch oder keine Berechtigungen für den aktuellen User des IIS

Kommt die Meldung im Firefox auch dann noch, deutet dies darauf hin, dass die herunter zu ladende Datei vom System nicht gefunden werden konnte.

Dies kommt jedoch ausschließlich dann vor, wenn man mittels folgender Befehle die Response-Header löscht und den Browser anweist einen bestimmten Dateityp zu erwarten (im folgenden Beispiel PDF).

protected void Page_Load(object sender, EventArgs e)

{

FileInfo file = new FileInfo(@“C:DatenmeinePDFdownload.pdf“);

Response.ClearContent();

Response.ClearHeaders();

Response.ContentType = „Application/pdf“;

Response.AddHeader(„Content-Disposition“, „inline;filename=test.pdf“);

try {

Response.AppendHeader(„Content-Length“, file.Length.ToString());

Response.WriteFile(file.FullName);

Response.Flush();

Response.Close();

} catch (Exception ex) {

Response.ClearContent();

}

}

Man sollte also nochmals manuell prüfen, ob die Datei überhaupt vorhanden und zugänglich ist.

jqplot funktioniert nicht im Internet Explorer, wenn nicht der richtige Doctype gesetzt ist

Bei jqPlot handelt es sich um ein jQuery-Plugin mit dem man bequem Graphen und Charts zeichnen kann. Es ist wie jQuery browserunabhängig, sagt zumindest die Dokumentation. Leider ist das nicht die ganze Wahrheit.

Fehlt im HTML-Code der Seite, in der geplottet werden soll nämlich die explizite Angabe des Doctype, so funktioniert es im Internet Explorer nicht und der Zeichenbereich bleibt weiß. Das ergibt dann je nach Versionsständen von jQuery und jqPlot verschiedenste Fehlermeldungen. Hier mal ein kurzer Auszug aus dem internen Debugger des Internet Explorer:

jQuery 1.6.1 mit jqPlot 1.0.0b2_r792

SCRIPT5007: Für die Eigenschaft „initElement“ kann kein Wert abgerufen werden: Das Objekt ist Null oder undefiniert
jquery.jqplot.min.js, Zeile 30 Zeichen 2036

jQuery 1.7.2 mit jqPlot 1.0.0b2_r1012

SCRIPT5007: Für die Eigenschaft „initElement“ kann kein Wert abgerufen werden: Das Objekt ist Null oder undefiniert
jquery.jqplot.min.js, Zeile 57 Zeichen 2123

Fügt man nun einfach als erste Zeile in den HTML-Code den Doctype

<!DOCTYPE html>

ein, so funktioniert es mit einem Mal auch im Internet Explorer.