32
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Subresource integrity でCDNリソースの改ざんを検知する

Last updated at Posted at 2015-09-18

Subresource Integrity って何?

ざっくり言うと、JavascriptやStylesheetファイルをCDNからロードする時、あらかじめ用意したチェックサムと突き合わせて、改ざんを検知する仕組み。

Subresource Integrity - GitHub Engineeringで記事を見たので少し調べてみた。

http://www.w3.org/TR/SRI/ によると2015年9月現在、仕様はまだドラフト。ただ、ブラウザによる実装は進んでいるようだ。先のGitHubの記事によると


Browser support at the time of this article's publishing:
Google Chrome added support in version 45
Mozilla Firefox plans to add support in version 43 (Nightly. Developer Edition as of next Monday)
Microsoft Edge support is "under consideration". Vote for the feature here.

とのこと。

CDNからコンテンツをロードするブラウザ側での対応なので、CDN側の対応は不要。

どうやって設定する?

これもGitHubの記事からの受け売りだが、Railsの場合、javascript_include_tagやstylesheet_link_tagにintegrity: true を設定するだけでいけるらしい。

ただ、sprockets-railsを見てみたところ、まだexperimental supportだった。version3から入るようだが、現在リリースされている2.x系では未サポート。

ただし、integrity: trueを指定しても無視されるだけなので、今のうちから入れておくのもいいかもしれない。

<%= javascript_include_tag 'application', integrity: true %>
<%= stylesheet_link_tag 'application', integrity: true %>

これだとブラウザ側でintegrity="true"となり、エラーが出ていた。(汗) ということで、対応するまでは入れてはいけない。

もし改ざんされてたらどうなるの?

単にロードされないだけだと思われるが、javascriptについてはfallbackするアイデアを見つけた。


<script src="https://code.jquery.com/jquery.min.js"
        integrity="sha256-C6CB9UYIS9UJeqinPHWTHVq…"
        crossorigin="anonymous"></script>
<script>window.jQuery || document.write('<script src="/jquery-.min.js"><\/script>')</script>
https://frederik-braun.com/using-subresource-integrity.html
32
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?