По состоянию на 23 июня 2016 Subresource Integrity является Рекомендация W3C, которая позволяет делать только что (черновой вариант here). Согласно Implementation Report она уже реализована в Firefox 43 и Chrome 45.
Простой пример использования целостности subresource будет что-то вроде:
<script src="https://example.com/example.js"
integrity="sha256-8OTC92xYkW7CWPJGhRvqCR0U1CR6L8PhhpRGGxgW4Ts="
crossorigin="anonymous"></script>
Также можно указать несколько пар алгоритм-хэш (так называемый метаданные) в поле целостности, разделенные пробелами и игнорирование недопустимых данных (§3.3.3). Ожидается, что клиент отфильтровывает самые сильные значения метаданных (§3.3.4) и сравнивает хэш фактических данных с хэш-значениями в наборе самых сильных значений метаданных (§3.3.5), чтобы определить, действительно ли ресурс. Например:
<script src="https://example.com/example.js"
integrity="
md5-kS7IA7LOSeSlQQaNSVq1cA==
md5-pfZdWPRbfElkn7w8rizxpw==
sha256-8OTC92xYkW7CWPJGhRvqCR0U1CR6L8PhhpRGGxgW4Ts=
sha256-gx3NQgFlBqcbJoC6a/OLM/CHTcqDC7zTuJx3lGLzc38=
sha384-pp598wskwELsVAzLvb+xViyFeHA4yIV0nB5Aji1i+jZkLNAHX6NR6CLiuKWROc2d
sha384-BnYJFwkG74mEUWH4elpCm8d+RFIMDgjWWbAyaXAb8Oo//cHPOeYturyDHF/UcnUB"
crossorigin="anonymous"></script>
Если клиент понимает, SHA256 и SHA384, но не MD5, то он размечает значение атрибута integrity
пропусков и отбрасывает md5-
маркеров метаданных как мусор. Затем клиент определяет, что самые сильные хэши в метаданных - SHA384 и сравнивает их значения с хэшем SHA384 фактических полученных данных.
Я думаю, что вы ищете это: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity, но я не использовал его, и он экспериментальный на данный момент. –
@SideriteZackwehdex Это звучит очень интересно. Благодаря! Однако я склонен думать, что схема URI может быть более универсальным решением. – jotik
Не зависит от операционной системы? Или вы имеете в виду http://stackoverflow.com/questions/16055458/install-a-service-handler-for-uri-scheme-from-webpage? –