今回はユーザが作成するJavaScriptを安全に実行するための手法、ソフトウェアを紹介します。昔はHTMLがダメ、とされていた中で徐々に使えるタグを広げていったり、Markdownを使うことで自由度を広げる傾向があります。同じようにJavaScriptもユーザが自由に記述、実行できるようになっていくのではないでしょうか。

別ドメイン

一番多いと思われるのが別ドメインによるJavaScript実行です。例えばjsdo.itの場合、各JavaScriptはjsrun.itというドメイン以下で実行されています。そこではCookieを発行したりすることもないため、不用意な漏洩を防ぐことができます。

iframe

iframeを使うことで親フレームと子フレーム間で情報をフィルタリングできます。ドメインを分けることで、フレーム間で情報をやり取りしたりJavaScriptで操作することはできなくなります。Facebookなどのソーシャルボタンで使われている方法です。なおスタイルシートは子フレームのデザイン変更に使えます。

パース

JavaScriptが安全であるか否か、テキストレベルでパースすることでチェックは可能です。悪意をもったスクリプトは大抵難読化されていたり、暗号化した上で配信されているので問題がないと判断するのは技術的に相当難しいと思われます。

サンドボックス

iframeなどと似ていますが、最近はこの手の手法が増えてきたように思います。実行環境を万一問題があるコードでも大丈夫なようにラッピングして実行します。iPhoneなどもそうですし、Dockerも環境をラッピングすることで安全な実行を可能にしています。

独自構文/DSL

提供する機能を限定するのであれば独自の構文を使ったり、DSLで提供してマクロとして動かすと言った方法も考えられます。パースに似ていますが、使える機能を限定することで安心して実行できるのではないでしょうか。