我担心在 WebPack 或 Browserify 的 bundle 中,由于疏忽,可能会包含包含数据库密码或会话密钥等秘密的模块。
即使我不直接导入这些模块,我也可能会从客户端入口模块间接导入它们。
是否有一种方法可以将这些文件列入黑名单,以便这些打包工具拒绝对它们进行打包? 即使我们尽力遵循最佳实践来避免此类问题,有这样一个安全网还是很好的。
include
和exclude
属性选择要将哪些目录列入黑名单或白名单。这些可以是RegEx或绝对路径。
./secret
目录中的JavaScript文件被包含在捆绑软件中。 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"
}
]
}
};
如果您希望防止从./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;
这个例子有点复杂,但它应该能给你一个好的想法如何执行它。简而言之,循环遍历你的加载器,并根据需要附加其他包含/排除。
如果您的代码库中存在机密数据,我建议为文件名提供一个类型。例如,如果您的文件名为sqlconnections.js
,我会将其重命名为sqlconnections.confidential.js
。然后我会将一个exclude正则表达式模式/\.confidential\.js$/
添加到我的加载器中。这创建了一个可以在您的代码库中重复使用的约定。