如何使用 browserify
创建私有(private)自定义全局变量?
例如,可以从所有 browserify 文件 (require()
) 访问变量,但不能在 browserify
block 、console
或其他脚本之外访问该变量无法访问它。
我尝试过全局,但可以从窗口/控制台访问它。
编辑:没有答案?我真的需要它来防止 self 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
最佳答案
我不太确定你想要实现什么(也许发布更多代码),但我假设你想在不暴露全局变量的情况下做一些事情?可以使用立即调用的函数吗?只要您的所有代码都在函数内,所有内容都将受到保护,但功能上不会发生任何变化:
(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 中。您不能拥有任何只能由您的代码访问的全局变量,因为任何人都可以打开控制台来访问任何全局变量。保护变量的唯一方法是封装所有代码。
关于javascript - 浏览器私有(private)全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36810300/