HTMLとJavaScriptは新しい拡張機能の開発を非常に容易にしている。しかし、かつての古いコードや、汎化されていない特殊なコードを使いたい場合はどうすれば良いだろうか。拡張機能はNPAPIプラグインを同梱することで、JavaScriptからネイティブなバイナリコードを呼び出すことが出来る。
NPAPIは、他にどうしても解決方法が無い場合の最終手段である
NPAPIによって実行されるコードは、現在実行中のユーザが持つ全てのパーミッションを持っており、悪意ある入力からのGoogle Chromeによる防御を全くされていない。例えば コンテント・スクリプト や XMLHttpRequest からの信頼出来ない入力には、特に注意をはらわなければならない。
NPAPIはユーザへの危険性を増すため、 は拡張機能の受け入れに、手動でのレビューを必要とする。
NPAPIプラグイン作成方法についての記述は、本ドキュメントの範疇を超える。詳しい方法は MozillaのNPAPIプラグインリファレンス を参照されたい。
NPAPIプラグイン作成後は、次のような手順で拡張機能より利用する。
1. manifest.json にプラグインに関する記述を追加する。
{
"name": "My extension",
...
"plugins": [
{ "path": "content_plugin.dll", "public": true },
{ "path": "extension_plugin.dll" }
],
...
}
“path“プロパティは、プラグインへのパスをマニフェストファイルからの相対パスで指定する。“public“は、このプラグインが通常のウェブページからもアクセス可能かを指定する。初期値は false で、この拡張機能のみがプラグインを利用出来ることを意味する。
2. mime-typeを指定して、HTMLファイルへプラグインを読み込む。ここでは mime-type が “application/x-my-extension” であると仮定する。
この記述は、バックグラウンド・ページなどのHTMLページで使用できる。このプラグインを “public” に設定すれば、コンテント・スクリプトを通じてウェブページ内で使用することも可能。
プラグインはローカル端末に無制限にアクセスできるため、NPAPIプラグインを拡張機能に入れるということは危険がつきまとう。もしプラグインが脆弱性を含んでいた場合、攻撃者はそれを通じて悪意あるソフトウェアをユーザの端末にインストールすることも出来る。可能な限り、NPAPIプラグインの利用は避けるべきである。
NPAPIプラグインを “public” にすることは、ウェブコンテンツから直接プラグインを利用できるようになるので、攻撃に晒される危険性は更に増す。悪意あるサイトは、より容易にプラグインを操作できるようになる。可能な限り、プラグインを “public” にすることは避けねばならない。