メモログ

Firefox 40 の CSP で「*」だけでは blob:を許容しなくなった。

File API から取得した画像のサムネイルをblueimp/JavaScript-Load-Imageを使って表示していたところが、Firefox 40 になってから表示されなくなったので、なんでだろうなあと思っていたら、Firefox 40からの CSP のポリシーに修正が入っていて、*(ワイルドカード)で blob:、data:、filesystem:のリソースを許容しなくなったのが原因でした。

真面目に調べようとして時間が経ってしまったのでざっくりいうと、現行の CSP(2015 年 2 月に Candidate Recommendation となっている)では、4.2.2. Matching Source Expressionsにて下記のように規定されている。

If the source expression a consists of a single U+002A ASTERISK character (*), and url’s scheme is not one of blob, data, filesystem, then return does match.

つまりアスタリスクで指定しているリソースについて、blob:や data:、filesystem での参照が対象外となっている。img-src:''(または img-src の指定がなくて、default-src:''がある)である場合、<img src=“blob:…みたいな画像を表示することができない。対応としては、img-src: ’*’,‘blob:‘とか一緒に指定しておけばいい(仕様をちゃんと確認してないから少し不安だけど)。

というメモ。

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。