Subresource Integrity

Submitted by admin on So, 23.04.2017 - 07:59

Von der Öffentlichkeit und insbesondere Webentwicklern weitgehend unbemerkt wurde bei den meisten Browsern eine Funktion Subresource Integrity[1] eingeführt. Sinn und Zweck dieses Features ist es, Javascript, CSS und andere (statische) Ressourcen über CDN zur Verfügung zu stellen und eine Integritätstest zuzulassen. Zu diesem Zweck wird der Ressource im html Sourcecode einfach ein Hashwert (sha256 oder besser) als Attribut mitgegeben.

Falls nun der Betreiber des CDN beschließt, den Code zu ändern, dann wird der Browser sich weigern, den Code nachzuladen. Unter [2] kann man seine Seite testen.

Eine Datei lässt sich mit

cat jquery.min.js | openssl dgst -sha384 -binary | openssl enc -base64

überprüfen.

Beispiel

<script src="/javascripts/jquery-ui/jquery-ui.min.js" integrity="sha384-C/LoS0Y+QiLvc/pkrxB48hGurivhosqjvaTeRH7YLTf2a6Ecg7yMdQqTD3bdFmMO" crossorigin="anonymous">

Fazit

Grundsätzlich eine gute Idee, solange der statische Code via CDN vom eigenen Server geladen wird (z.B. Cloudflare). Im Falle von jquery (https://code.jquery.com/) geht das auch noch gut, so lange eine bestimmte jquery Version verlinkt wird. Leider klappt das nicht bei allen Cloud Lösungen. An dieser Stelle sollte man auf die Cloud Lösung lieber verzichten, statt auf das Sicherheitsfeature SRI.

Wenn die eigene Homepage alles selber hostet, dann ist SRI entbehrlich, wenn der eigene Server unsicher ist, dann hilft SRI auch nicht mehr. Werden Teile jedoch über den CDN bereitgestellt, dann ist SRI ein echtes Must-Have.

Vorsicht: Manche Frameworks machen ein Minify der Dateien. Klar, dass der Hashwert dann nicht mehr stimmt. Bessere Lösung: Offline mit z.B. Uglify die kompakte Datei erzeugen und dann erst den Hashwert bilden. Die Anwendung selbst darf kein Minify mehr machen, oder sie muss den Hashwert selbst jedes Mal neu berechnen.

Quellen

[1] https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity
[2] https://sritest.io/

Tags