2012-03-02

Google Chrome 18のエクステンションの仕様に破壊的変更が来る

Chromium Blog: Writing Extensions More Securely
Chromium Blog: More secure extensions, by default

Chrome 18でManifest Version 2を指定した場合、インラインscriptが使えない。evalも使えない。Background Pagesの仕様も変わっている。

つまり、今までエクステンションで、

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<script type="application/javascript">
/* Javascriptのコード */
</script>

</head>

</html>

としていた場合、Javascriptのコードを別のファイルに分離して、

/* sample.js*/

/* Javascriptのコード */

それをscript要素のsrc属性で読み込まなければならない。

<script type="application/javascript" src="sample.js"></script>

セキュリティに関しての変更もある。デフォルトでは、パッケージ内のリソースしか使えない。詳しくは、Content Security Policy (CSP) - Google Chrome Extensions - Google Codeを参照。

とりあえず、青空縦書きリーダーに必要な変更をした。おそらく動くはずだ。background pageだけは、Chrome 18にならないと検証できない。そのため、Chrome 18のstableがリリースされるまでは、アップデートはない。

しかし、インラインJavascriptの禁止はかなりでかい変更だ。対応は、単に別ファイルに移すというトリビアルな作業とはいえ、かなりのエクステンションが、ちょっとしたことはインラインJavascriptで処理していただろうから、対応は面倒だ。しかし、必要でもある。インラインJavascriptを一律に禁止して、デフォルトのセキュリティで、パッケージ内のリソースしか読み込まないようにしておけば、エクステンションのセキュリティは大幅に上がる。外部のリソースに頼るということは、DNSが乗っ取られたり、あるいは中間に悪意ある者がいた場合(オープンなWifiを信用してはならない)、そのリソースを差し替えられてしまうからだ。インラインjavascriptの全面禁止は納得できる。しかし、今まで普通に使えていて、サンプルまでインラインJavascriptを多用していたのに、いきなり全面禁止はつらい。もちろん、deprecatedなマニフェストバージョン1を使っていれば、今までどおり使える。しかし、将来を考えたエクステンションは、バージョン2に移行するべきである。

No comments: