javascript がブラウザーで実行されている場合、関数コードはダウンロードされてソースで表示されるため、関数コードを非表示にする必要はありません。
サーバー上で実行すると、状況が変わります。実行されるコードをユーザーに表示させずに呼び出す関数をユーザーに提供したい api などのユースケースがあります。
特定のケースでは、ノード内でユーザーが送信した JavaScript を実行したいと考えています。node.js api をサンドボックス化することはできますが、ユーザーが関数を toString して実行されるコードを表示することなく、このサンドボックスに独自の api を追加したいと考えています。
ユーザーが関数コードを出力できないようにするパターンや方法を知っている人はいますか?
アップデート:
これは、以下の受け入れられた回答に基づく完全な解決策です(私は信じています)。これはクライアント側のコードを使用して示されていますが、注意してください。ダウンロードしたコードを読むだけで隠し関数の内容を誰かが見ることができるため、このクライアント側は使用しません(ただし、縮小化を使用した場合は、コードを検査するために基本的な速度が低下する可能性があります)。
これは、ユーザーがサンドボックス環境内で API コードを実行できるようにするが、API の動作を表示できないようにするサーバー側での使用を目的としています。このコードのサンドボックスは、要点を示すためだけのものです。これは実際のサンドボックスの実装ではありません。
// function which hides another function by returning an anonymous
// function which calls the hidden function (ie. places the hidden
// function in a closure to enable access when the wraped function is passed to the sandbox)
function wrapFunc(funcToHide) {
var shownFunc = function() {
funcToHide();
};
return shownFunc;
}
// function whose contents you want to hide
function secretFunc() {
alert('hello');
}
// api object (will be passed to the sandbox to enable access to
// the hidden function)
var apiFunc = wrapFunc(secretFunc);
var api = {};
api.apiFunc = apiFunc;
// sandbox (not an actual sandbox implementation - just for demo)
(function(api) {
console.log(api);
alert(api.apiFunc.toString());
api.apiFunc();
})(api);