JavaScript はうまく使うと非常に便利な機能ですが、残念ながらこれを悪用することで非常に迷惑な処理を行うサイトがあります。

Mozilla では設定画面から JavaScript の on/off 程度の設定は可能ですが、user.js に設定することでより高度な制御が可能となります。

ゾーンポリシー

IE では、インターネットゾーン、イントラネットゾーン、信頼サイト、制限サイトなどのゾーン定義がありますが、Mozilla にもこういった定義が可能となっています。

Mozilla では、基本的に default ゾーンのみが定義されていて、後は自由に定義できます。例えば、user_pref("capability.policy.default.Window.open", "noAccess"); といった定義により、default ゾーンでは Window.open を禁止する、という設定が行えます。

default ゾーンは全てのサイトに適用されますが、特定のサイトは動いてくれないと困る、という場合もあるかと思います。そういった場合には固有のゾーンポリシーを作成します。ゾーンポリシーは非常に簡単に作成できます。例えば js-ok というゾーンを定義して、www.alib.jp と www2.alib.jp を含める場合には次のようにスペースで区切って記述します。

user_pref("capability.policy.js-ok.sites", "http://www.alib.jp http://www2.alib.jp");

このゾーンにルールを定義していくのは default ゾーンと同様に記述します。例えば Window.open を許可する場合には user_pref("capability.policy.js-ok.Window.open", "sameOrigin"); と記述します。

セキュリティレベル

Mozilla は各プロパティへのアクセスを制限する為の 3 つのレベルを持っています。

noAccess

一切許可しません。

sameOrigin

同一サイト内のページに限りアクセスを許可します。

allAccess

異なるサイトでもアクセスを許可します。

これ以外の名前を指定した場合には特権名となり、署名されたスクリプト以外は動作しなくなります。

ウィンドウ制御

ウィンドウを制御するコードのアクセス権を設定できます。

user_pref("capability.policy.<zone>.Window.open", "rule");

ウィンドウを開きます。noAccess に設定することで、ウィンドウが開かれる事を抑制します。

user_pref("capability.policy.<zone>.Window.close", "rule");

ウィンドウを閉じます。noAccess に設定することで、ウィンドウが閉じられる事を抑制します。

user_pref("capability.policy.<zone>.Window.confirm", "rule");

確認ダイアログを開きます。noAccess に設定することで、確認ダイアログが開かれる事を抑制します。

user_pref("capability.policy.<zone>.Window.alert", "rule");

警告ダイアログを開きます。noAccess に設定することで、警告ダイアログが開かれる事を抑制します。

user_pref("capability.policy.<zone>.Window.prompt", "rule");

問い合わせダイアログを開きます。noAccess に設定することで、問い合わせダイアログが開かれる事を抑制します。

user_pref("capability.policy.<zone>.Window.status", "rule");

ステータスバーへアクセスします。noAccess に設定することで、ステータスバーへのアクセスを抑制します。これにより、ステータスバーへメッセージを表示されたりするのを防ぎます。

user_pref("capability.policy.<zone>.Window.innerHeight", "rule");

ウインドウの innerHeight プロパティへアクセスします。noAccess に設定することで、innerHeight へのアクセスを抑制します。これにより、innerHeight 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.innerWidth", "rule");

ウインドウの innerWidth プロパティへアクセスします。noAccess に設定することで、innerWidth へのアクセスを抑制します。これにより、innerWidth 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.outerHeight", "rule");

ウインドウの outerHeight プロパティへアクセスします。noAccess に設定することで、outerHeight へのアクセスを抑制します。これにより、outerHeight 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.outerWidth", "rule");

ウインドウの outerWidth プロパティへアクセスします。noAccess に設定することで、outerWidth へのアクセスを抑制します。これにより、outerWidth 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.sizeToContent", "rule");

ウインドウの sizeToContent プロパティへアクセスします。noAccess に設定することで、sizeToContent へのアクセスを抑制します。これにより、sizeToContent 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.resizeBy", "rule");

ウインドウの resizeBy プロパティへアクセスします。noAccess に設定することで、resizeBy へのアクセスを抑制します。これにより、resizeBy 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.resizeTo", "rule");

ウインドウの resizeTo プロパティへアクセスします。noAccess に設定することで、resizeTo へのアクセスを抑制します。これにより、resizeTo 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.moveBy", "rule");

ウインドウの moveBy プロパティへアクセスします。noAccess に設定することで、moveBy へのアクセスを抑制します。これにより、moveBy 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.moveTo", "rule");

ウインドウの moveTo プロパティへアクセスします。noAccess に設定することで、moveTo へのアクセスを抑制します。これにより、moveTo 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.screenX.set", "rule");

ウインドウの screenX.set プロパティへアクセスします。noAccess に設定することで、screenX.set へのアクセスを抑制します。これにより、screenX.set 変更によってウィンドウサイズを変更されたりするのを防ぎます。

user_pref("capability.policy.<zone>.Window.screenY.set", "rule");

ウインドウの screenY.set プロパティへアクセスします。noAccess に設定することで、screenY.set へのアクセスを抑制します。これにより、screenY.set 変更によってウィンドウサイズを変更されたりするのを防ぎます。値の取得を許可する場合は Set のみを抑制するようにします。

user_pref("capability.policy.<zone>.Window.focus", "rule");

ウインドウの focus プロパティへアクセスします。noAccess に設定することで、focus へのアクセスを抑制します。これにより、focus が変更されるのを抑制できます。

user_pref("capability.policy.<zone>.Window.blur", "rule");

ウインドウの blur プロパティへアクセスします。noAccess に設定することで、blur へのアクセスを抑制します。これにより、focus が外されるのを抑制できます。

user_pref("capability.policy.<zone>.Window.self", "rule");

ウインドウの self プロパティへアクセスします。noAccess に設定することで、self へのアクセスを抑制します。これにより、ウィンドウオブジェクトの自身の参照を抑制できます。

user_pref("capability.policy.<zone>.Window.window", "rule");

ウインドウの window プロパティへアクセスします。noAccess に設定することで、window へのアクセスを抑制します。これにより、ウィンドウオブジェクトが持つウィンドウオブジェクトの参照を抑制できます。

user_pref("capability.policy.<zone>.Window.openDialog", "rule");

ウインドウの openDialog プロパティへアクセスします。noAccess に設定することで、openDialog へのアクセスを抑制します。これにより、ウィンドウオブジェクトによってダイアログが開かれる事を抑制できます。

画面制御

画面情報を読み出されたりするのを防ぎます。これにより、画面一杯にウィンドウを開くということを容易にできないようにできます。

また、個人情報漏洩防止の観点から読み出しを防ぐという見方もあります。

user_pref("capability.policy.<zone>.Screen.top", "rule");

画面の top プロパティへアクセスします。noAccess に設定することで、top へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.left", "rule");

画面の left プロパティへアクセスします。noAccess に設定することで、left へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.width", "rule");

画面の width プロパティへアクセスします。noAccess に設定することで、width へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.height", "rule");

画面の height プロパティへアクセスします。noAccess に設定することで、height へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.availTop", "rule");

画面の availTop プロパティへアクセスします。noAccess に設定することで、availTop へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.availLeft", "rule");

画面の availLeft プロパティへアクセスします。noAccess に設定することで、availLeft へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.availWidth", "rule");

画面の availWidth プロパティへアクセスします。noAccess に設定することで、availWidth へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.availHeight", "rule");

画面の availHeight プロパティへアクセスします。noAccess に設定することで、availHeight へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.pixelDepth", "rule");

画面の pixelDepth プロパティへアクセスします。noAccess に設定することで、pixelDepth へのアクセスを抑制します。

user_pref("capability.policy.<zone>.Screen.colorDepth", "rule");

画面の colorDepth プロパティへアクセスします。noAccess に設定することで、colorDepth へのアクセスを抑制します。

位置制御

ロケーション情報を制御します。

user_pref("capability.policy.<zone>.Location.reload", "rule");

ロケーション情報の reload プロパティへアクセスします。noAccess に設定することで勝手なリロードを抑制できます。

user_pref("capability.policy.<zone>.Location.replace", "rule");

ロケーション情報の replace プロパティへアクセスします。noAccess に設定することで勝手にロケーションを置き換えられることを抑制できます。

user_pref("capability.policy.<zone>.Location.hash.set", "rule");

ロケーション情報の replace プロパティへアクセスします。noAccess に設定することで勝手にロケーション情報を書き換えられることを抑制できます。

user_pref("capability.policy.<zone>.Location.href.set", "rule");

ロケーション情報の replace プロパティへアクセスします。noAccess に設定することで勝手にロケーション情報を書き換えられることを抑制できます。

user_pref("capability.policy.<zone>.Window.location", "rule");

ウィンドウオブジェクトのロケーション情報へアクセスします。noAccess に設定することで勝手にロケーション情報へアクセスされることを抑制できます。

履歴制御

user_pref("capability.policy.<zone>.History.back", "rule");

履歴を辿り、一つ前に戻ります。noAccess に設定することで、一つ前に戻されるのを抑制します。

user_pref("capability.policy.<zone>.History.current", "rule");

履歴の現在値を取得します。noAccess に設定することで、現在値へのアクセスを抑制します。

user_pref("capability.policy.<zone>.History.forward", "rule");

履歴の一つ先を取得します。noAccess に設定することで、一つ先の履歴へのアクセスを抑制します。

user_pref("capability.policy.<zone>.History.go", "rule");

指定された履歴を取得します。noAccess に設定することで、指定の履歴へのアクセスを抑制します。

user_pref("capability.policy.<zone>.History.item", "rule");

指定された履歴を取得します。noAccess に設定することで、指定の履歴へのアクセスを抑制します。

user_pref("capability.policy.<zone>.History.next", "rule");

履歴の一つ先を取得します。noAccess に設定することで、一つ先の履歴へのアクセスを抑制します。

user_pref("capability.policy.<zone>.History.previous", "rule");

履歴を辿り、一つ前に戻ります。noAccess に設定することで、一つ前に戻されるのを抑制します。

user_pref("capability.policy.<zone>.History.toString", "rule");

履歴の toString メソッドへアクセスします。noAccess に設定することで、toString メソッドへのアクセスを抑制します。

user_pref("capability.policy.<zone>.Window.history", "rule");

ウィンドウオブジェクトが持つ履歴へアクセスします。noAccess に設定することで、履歴へのアクセスを抑制します。