javascript - 浏览器私有(private)全局变量

标签 javascript browserify

如何使用 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/

相关文章:

javascript - 未捕获的类型错误 : undefined is not a function for request() in Titanium

javascript - Google 应用程序脚本,介绍如何根据从 html 形式的电子表格收到的数据创建 pdf 并通过电子邮件发送 pdf 文件

webpack - 在 Vue 上使用带有 Webpack 的 plotly.js 3d scatter3d

javascript - 使用 mocha 和 browserify 进行测试

javascript - 需要多个 Vue 组件的更简洁的方法?

javascript - Leaflet Javascript动态添加文件作为对象

javascript - for...in 循环在 JavaScript 中有用吗?

javascript - 单击不同的按钮不允许我返回原来的按钮

javascript - browserify-shim 别名和 varName 之间的区别 = require ("module")

javascript - browserify/requirejs模块和ES6模块有什么区别