Caja(発音は/ ˈ k ɑː h ɑː / KAH -hah)[ 1 ]は、サードパーティのHTML、CSS、JavaScript をサニタイズするためのGoogleプロジェクトでした。2021 年 1 月 31 日、Google は既知の脆弱性と最新の Web セキュリティ研究に対応するためのメンテナンス不足のため、このプロジェクトをアーカイブし、代わりにClosure ツールキットを推奨しました。[ 2 ]
Caja プロジェクトは Jasvir Nagra が主導し、JavaScript 部分は Google の研究科学者Mark S. Millerによって2008 年に設計されました[ 3 ] [ 4 ]オブジェクト機能の原則に基づいた「仮想 iframe」の JavaScript 実装です。JavaScript (厳密にはECMAScript 5 の厳格モードのコード)、HTML、CSS の入力を受け取り、それを安全な HTML と CSS のサブセットと、自由変数のない単一の JavaScript 関数に書き換えます。つまり、そのような関数がオブジェクトを変更できる唯一の方法は、ホスト ページからオブジェクトへの参照を与えられた場合のみです。DOM オブジェクトへの直接参照を与える代わりに、ホスト ページは通常、HTML をサニタイズし、 URLをプロキシし、ページのリダイレクトを防止するラッパーへの参照を与えます。これにより、Caja は特定のフィッシングやクロス サイト スクリプティング攻撃を防ぎ、マルウェアのダウンロードを防ぐことができました。また、書き換えられたすべてのプログラムが同じフレームで実行されるため、ホスト ページは、あるプログラムが別のプログラムにオブジェクト参照をエクスポートすることを許可できます。当時、フレーム間の通信は単にメソッド呼び出しだった。
「caja」という言葉はスペイン語で「箱」または「金庫」(銀行の金庫など)を意味し、CajaはJavaScriptプログラムを安全に保管できるだけでなく、機能ベースのJavaScriptでもあるという考えに基づいています。
CajaはGoogleのGoogle Apps Script [ 5 ]製品で使用されました。2008年にはMySpace [ 6 ] [ 7 ]とYahoo! [ 8 ]の両方がCajaの非常に初期のバージョンを導入しました。