サンドボックスについてもっと知りたいです。それだけではありません。簡単なサンドボックスを書けるようになりたいです。
驚くべきことに、どこにも情報がありません。ウィキペディアの記事でさえ良くありません。
どなたか良い素材を教えてください。私はその非常に高度なレベルの概念を知っています。それで、それを学び、習得するための前提条件は何ですか。
APIフックについて読んでください。たとえば、sandboxieはWindowsカーネルをフックしてファイルシステムへのすべてのAPI呼び出しをフィルタリングし、結果をサンドボックスにリダイレクトします。APIをフックしてフィルタリングし、有効なパラメーターのみを渡し、無効な呼び出しに対してエラーを返すことができます。
APIフックについては、ネット上にたくさんの資料があります。codeproject.comを試してください。
GoogleのChromiumはサンドボックスを使用しており、サンドボックスに関するいくつかのドキュメントがあります。
これは、何をサンドボックス化するかによって大きく異なります。複数のインターフェース/言語が利用可能な本格的なシステムである場合、車輪を再発明するのではなく、VirtualBox、QEmuまたはその他の代替手段で仮想マシンを実行します
いずれにせよ、サンドボックスは、少なくともあるレベルでは、実行中の「想定」されているシステムの仮想化です...
単一の (インタープリター付きの) 言語用にアプリケーションをサンドボックス化する必要がある場合、インタープリターを変更することは賢明なアプローチのように思えます。
先日、Linux内でのサンドボックス化の方法の概要を書きました。これは、さまざまな手法の多くのリファレンスにリンクしています。同様の方法が他のオペレーティングシステムにも適用できます。お役に立てば幸いです。包括的に文書化されたものもあまり見つかりませんでした。
答えはおそらく言語固有です。残念ながら、ほとんどの言語には組み込みのサンドボックス機能がありません。しかし、関数型言語は、言語を拡張せずにゼロから構築できるほど強力な傾向があります。
Tcl では、基本的なメカニズムはスレーブ インタープリターを作成することです。
interp create -safe sandbox
interp eval sandbox $set_up_code
set result [interp eval sandbox $unsafe_code]