如何防止机密数据包含在WebPack包中

Gui*_*ira 5 configuration-files secret-key webpack

我担心,通过省略,包含数据库密码或会话密钥等秘密的模块可以包含在WebPack或Browserify捆绑包中.

即使我不直接导入这些模块,我也可能不小心从客户端入口点模块间接导入它们.

有没有办法将这些文件列入黑名单,以便这些捆绑包拒绝捆绑它们?尽可能愿意遵循可避免此类问题的最佳实践,但拥有这样一个安全网会很好.

cga*_*ian 4

通过loaderinclude导入文件时,您可以通过和属性选择将目录列入黑名单或白名单exclude。这些可以是正则表达式或绝对路径。

一个简单的例子

以下内容可防止任何 JavaScript 文件包含在./secret目录中存在的包中。

 var path = require('path');
        module.exports = {
          // Configuration omitted for brevity
          module :{
            loaders : [
                { 
                  test: /\.js$/, 
                  loader: "script",
                  exclude : path.resolve(__dirname, './secret')  // Exclude secret directory
                },
                { 
                  test: /\.css$/, 
                  loader: "style!css" 
                }
            ]
          }
        };
Run Code Online (Sandbox Code Playgroud)

为所有加载器应用过滤器的复杂示例

如果您想防止./secret目录中的文件被意外导入,并且只允许包含该目录中的文件,src您可以执行以下操作。

var path = require('path');
var blackList = [ path.resolve(__dirname, './secret') ];
var whiteList = [ /src/ ]; // Allow only directories containing "src"

var config = { 
...
/// Webpack configuration
};

// Apply whitelisting and blacklisting for all loaders
config.module.loaders.forEach(function(loader)
{
   loader['exclude'] = [...(loader['exclude'] || []), ...blackList];
   loader['include'] = [...(loader['include'] || []), ...whiteList];
});

module.exports = config;
Run Code Online (Sandbox Code Playgroud)

该示例有点复杂,但它应该可以让您很好地了解如何执行它。简而言之,循环加载程序并根据需要附加其他包含/排除。

奖励:为您的秘密数据提供类型

如果您的代码库中确实存在机密数据,我建议为文件名提供一个类型。例如,如果您的文件被命名为,sqlconnections.js我会将其重命名为sqlconnections.confidential.js. 然后我会向我的加载器添加排除正则表达式模式/\.confidential\.js$/。这创建了一个可以在您的代码库中重用的约定。