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:'とか一緒に指定しておけばいい(仕様をちゃんと確認してないから少し不安だけど)。

というメモ。