1

ノードjsでグローバル変数と関数を制限する方法は?

like: メソッドが必要

require メソッドの使用を制限したい。ノードアプリがエクスプレスの上に構築したノードフレームワークの「fs」にアクセスしたくないので、必要なモジュールのみを要求できます。また、プロセス、グローバルスコープへのアクセスを制限したい。

任意のアプリの任意の js ライブラリをロードするとします。

お気に入り:

var x=require('app1.js');

私のフレームワークで

次に、この app1.js が require("fs") を使用してファイルシステムにアクセスできないようにしたい

app1.js

var x=require("fs");
exports.hello=function(){
   console.log(typeof x.readSync);
}

このコンソールに undefined; と表示させたい。

そしてこのサンプルでは

var x=require("helper.js");
exports.hello=function(){
   console.log(typeof x.hello);
}

このコンソールに機能を出力させたい。

前もって感謝します

4

3 に答える 3

1

require のように機能する新しい関数を作成します。

requireSafe = function(param){
    if(!isAllowedLogic(param)) return null;
    else return require(param);
}

また、誰かがコードを送信するときvar require;は、上部に追加して、通常のrequire. または、提出物を検索し、それが含まれていない場合にのみ承認しrequireますeval

于 2014-07-18T14:13:12.747 に答える
0

Why would you want to do that?

It is not possible to change the way require works, as it is a build-in node.js function.

于 2013-01-14T10:33:39.380 に答える
0

README から、このライブラリを試して、そのセキュリティがどのように機能するかの詳細を確認してください。

Node.js サブプロセスは、Jailed ライブラリによって作成されます。

サブプロセスは、信頼できないコードを含むファイルを文字列として (ダウンロード) ロードします (または、DynamicPlugin の場合は、提供された文字列をコードで使用するだけです)。

次に「厳格を使用」。そのコードの先頭に追加されます (arguments.callee.caller を使用してサンドボックスを壊さないようにするため);

最後に、コードは vm.runInNewContext() メソッドを使用して実行されます。提供されたサンドボックスは、setTimeout() などのいくつかの基本的なメソッドと、アプリケーション サイトとのメッセージング用のアプリケーション オブジェクトのみを公開します。

于 2016-01-14T12:23:07.057 に答える