Adventtipp 15 – Sitecore Media Request Protection & Custom Parameter

sitecore-advent15

 

Ziel

Ab Sitecore 7.5 gibt es die Media Request Protection. Dabei wird die Url eines Media Items, z.B. für ein Bild, zusätzlich mit einem Hashwert versehen, der sich aus der Url und den Queryparametern errechnet. Dabei sollten alle Queryparameter, die die Grösse oder Dimension resp. im Falle eines Bildes auch das Aussehen (z.B. Grayscale etc.) eines Media Items dynamisch verändern, in diese Hashberechung mitaufgenommen werden. Dadurch wird verhindert, dass bei einem Request mit veränderten oder ungültigen Queryparametern vom Server Ressourcen für die Verarbeitung eingesetzt werden. Anstelle dessen wird eine unveränderte Version des Media Items, ohne die Queryparameter in Betracht zu ziehen, zurückgeliefert.

Konfiguration

Für die Konfiguration betreffend die Media Request Protection gibt es eine Config namens ‚Sitecore.Media.RequestProtection.config‘. Darin lässt sich unter anderem erkennen, welche Parameter die Hashberechnung beeinflussen und für welche Sites sie überhaupt aktiviert ist. Grundsätzlich würde sich über ein Setting auch die gesamte Request Protection deaktivieren lassen, wovon aber stark abgeraten wird.

Des Weiteren gibt es ein Setting ‚Media.RequestProtection.SharedSecret‘, das als sogenanntes ‚Salt‘ für die Hashberechnung fungiert. Sitecore empfiehlt dabei diesen Wert zu verändern und durch einen zufällig generierten String zu ersetzen. Ansonsten könnte ein potentieller Angreifer das allgemein bekannte Shared Secret nutzen, um mit diesem zusammen die Parameter zu verändern und selbst den neuen, korrekten Hash zur Url zu errechnen.

Custom Media Query Parameter

Manchmal ergibt sich aus einem Projekt die Anforderung zusätzliche Veränderungen am Bild vorzunehmen, was dann in einem sogenannten Custom Media Query Parameter resultiert. Wie schon bei den von Sitecore vorgegebenen Parametern empfiehlt es sich, diesen Parameter in die Media Request Protection mit aufzunehmen, sofern sich der Parameter auf die Grösse bzw. Dimension des Bildes auswirkt. Als Beispiel aus einem aktuellen Projekt wäre eine Fokusfunktionalität zu nennen, die es erlaubt für ein Bild einen Fokusbereich zu setzen, auf den sich der Ausschnitt des neu berechneten Bildes konzentriert, sofern eine Grössenanpassung nötig wäre. Der Fokus wird dabei als zusätzlicher Queryparameter in die Url aufgenommen.

Damit der errechnete Hash den zusätzlichen Parameter enthält, ist es notwendig, den Parameter in der Konfiguration zu spezifizieren. Wiederum muss dazu die ‚Sitecore.Media.RequestProtection.config‘ angepasst werden. Dazu muss einfach ein zusätzliches XML-Element mit einer Beschreibung und dem Queryparameternamen zum Bereich ‚protectedMediaQueryParameters‘ hinzugefügt werden. Unten findet sich ein Beispielbild, wo der Parameter ‚focus‘ hinzugefügt wurde.

sitecore-advent20

 

Wann wird der zusätzliche Hashwert angehängt?

Die weiter oben bereits genannte ‚Sitecore.Media.RequestProtection.config‘ enthält eine  zusätzliche, bisher nicht genannte Änderung. Nämlich wurde der ‚renderField‘ Pipeline ein zusätzlicher Processor hinzugefügt, damit durch den FieldRenderer gerenderte Felder den Hashwert automatisch enthalten.

Wenn die Url selbst zusammengebaut wird oder wie oben genannt ein Custom Media Query Parameter hinzukommt, den man normalerweise manuell resp. im Code der Url anhängt, muss der Hash selbst errechnet werden. Dazu gibt es die von Sitecore zur Verfügung gestellte statische Klasse HashingUtils mit der Methode ProtectAssetUrl(string). Des Weiteren gibt es eine aspx-Seite mit der sich der Hash, z.B. für statische Media Items, berechnen lässt. Sie ist unter folgendem Pfad erreichbar: ‚/sitecore/admin/MediaHash.aspx‘

 

Quellen:

  • https://sdn.sitecore.net/products/sitecore%20v5/sitecore%20cms%207/releasenotes/changelog.aspx, 12.12.2016 (Login notwendig)
  • https://doc.sitecore.net/sitecore_experience_platform/setting_up__maintaining/security_hardening/configuring/protect_media_request, 12.12.2016

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>