MST

星途 面试题库

面试题:JavaScript ES6模块安全优化之中等难度题

在JavaScript ES6模块中,如何防止敏感信息通过模块暴露出去?请举例说明。
45.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

在JavaScript ES6模块中,可以通过以下方式防止敏感信息暴露:

  1. 使用letconst声明私有变量:在模块内部声明的变量如果没有通过export关键字导出,默认是私有的,外部无法访问。
    // module.js
    const privateSecret = 'this is a secret';
    let privateCounter = 0;
    function incrementPrivateCounter() {
        privateCounter++;
        return privateCounter;
    }
    export function getSecret() {
        return 'Secret is hidden';
    }
    export function getCounter() {
        return incrementPrivateCounter();
    }
    
    在上述代码中,privateSecretprivateCounter没有被export,外部模块无法直接访问它们。只有通过export导出的getSecretgetCounter函数才能被外部调用,这样敏感信息就不会直接暴露。
  2. 使用闭包:利用闭包的特性,将敏感信息封装在内部函数中,只对外暴露安全的接口。
    // module.js
    const createModule = () => {
        const privateData = {
            sensitiveInfo: 'confidential data'
        };
        return {
            getSafeData: () => {
                return 'Safe data from module';
            }
        };
    };
    export default createModule();
    
    这里通过createModule函数返回一个对象,对象中的方法可以访问闭包内的privateData,但外部无法直接访问privateData中的敏感信息。只有getSafeData方法暴露给外部使用。