Browserify 私有全局变量
Browserify private global variable
如何使用 browserify
创建私有自定义全局变量?
例如,一个变量可以从所有 browserify 文件 (require()
) 访问,但不能在 browserify
块之外,console
或其他脚本无法访问它。
我试过全局,但可以从 window / console.
访问
编辑:没有答案?我真的需要它来防止自我 XSS(例如,恶意脚本窃取用户数据或发送错误数据包以删除他的房间等...)
示例代码:
Main.js
mycustomglobal.test = require('blabla');
mycustomglobal.test2 = require('blablablabla');
var users = require('./users.js');
Users.js 文件:
console.log(mycustomglobal);
// we need to be able to get test and test2
控制台/或其他脚本
console.log(mycustomglobal)
// we need to get undefined
我不太确定您要实现的目标(也许 post 一些更多代码),但我假设您想在不公开全局变量的情况下做一些事情?您可以使用立即调用的函数吗?只要您的所有代码都在该函数内,一切都将受到保护,但功能上不会发生任何变化:
(function() {
var module = require('your_module'),
connection = new WebSocket('server.php'),
data = [{score: 12, name: 'test'}, {score: 40, name: 'user1'}];
// ... Your other code
})();
如果您有很多脚本,您可能必须将它们包装在函数中,然后使用 IIF 从您的主脚本中调用它们,传递任何参数以防止它们泄漏:
js_file_1.js:
(function() {
var private_non_global = 1234;
// Do some stuff...
script2(private_non_global); // Go to next script...
})();
js_file_2.js:
function script2(private_non_global_from_script1) {
private_non_global_from_script1 === 1234;
// Do more stuff, etc.
}
如果您可以更改服务器端的内容,您可以将所有代码包装在一个巨大的 IIF 中。您不能拥有任何只能由您的代码访问的全局变量,因为任何人都可以打开控制台来访问任何全局变量。保护变量的唯一方法是封装所有代码。
我认为这样的东西会满足您的需要。您需要创建一个模块,我更喜欢将其命名为 private_globals.js
:
var globals={};
module.exports=globals;
在您的其他文件中,您可以使用此模块的导出对象。
var globals=require("./private_globals")
console.log(globals.privateVar1);
globals.privateVar2=10;
我想不出别的办法,除非你弄乱 browserify 的源代码。
如何使用 browserify
创建私有自定义全局变量?
例如,一个变量可以从所有 browserify 文件 (require()
) 访问,但不能在 browserify
块之外,console
或其他脚本无法访问它。
我试过全局,但可以从 window / console.
编辑:没有答案?我真的需要它来防止自我 XSS(例如,恶意脚本窃取用户数据或发送错误数据包以删除他的房间等...)
示例代码:
Main.js
mycustomglobal.test = require('blabla');
mycustomglobal.test2 = require('blablablabla');
var users = require('./users.js');
Users.js 文件:
console.log(mycustomglobal);
// we need to be able to get test and test2
控制台/或其他脚本
console.log(mycustomglobal)
// we need to get undefined
我不太确定您要实现的目标(也许 post 一些更多代码),但我假设您想在不公开全局变量的情况下做一些事情?您可以使用立即调用的函数吗?只要您的所有代码都在该函数内,一切都将受到保护,但功能上不会发生任何变化:
(function() {
var module = require('your_module'),
connection = new WebSocket('server.php'),
data = [{score: 12, name: 'test'}, {score: 40, name: 'user1'}];
// ... Your other code
})();
如果您有很多脚本,您可能必须将它们包装在函数中,然后使用 IIF 从您的主脚本中调用它们,传递任何参数以防止它们泄漏:
js_file_1.js:
(function() {
var private_non_global = 1234;
// Do some stuff...
script2(private_non_global); // Go to next script...
})();
js_file_2.js:
function script2(private_non_global_from_script1) {
private_non_global_from_script1 === 1234;
// Do more stuff, etc.
}
如果您可以更改服务器端的内容,您可以将所有代码包装在一个巨大的 IIF 中。您不能拥有任何只能由您的代码访问的全局变量,因为任何人都可以打开控制台来访问任何全局变量。保护变量的唯一方法是封装所有代码。
我认为这样的东西会满足您的需要。您需要创建一个模块,我更喜欢将其命名为 private_globals.js
:
var globals={};
module.exports=globals;
在您的其他文件中,您可以使用此模块的导出对象。
var globals=require("./private_globals")
console.log(globals.privateVar1);
globals.privateVar2=10;
我想不出别的办法,除非你弄乱 browserify 的源代码。