Skip to content

Commit 103f53c

Browse files
committed
security: ensures that server secret is not served to user
This will also prohibit some weak secrets like "123456" and former default "flood".
1 parent 042cb4c commit 103f53c

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

server/bin/enforce-prerequisites.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
const fs = require('fs');
2+
const glob = require('glob');
23
const path = require('path');
34

5+
const {secret} = require('../../config');
6+
47
const staticAssets = [path.join(__dirname, '../assets/index.html')];
58

69
const configFiles = [path.join(__dirname, '../../config.js')];
@@ -17,6 +20,20 @@ const doFilesExist = (files) => {
1720
}
1821
};
1922

23+
const grepRecursive = (folder, match) => {
24+
return glob.sync(folder.concat('/**/*')).some((file) => {
25+
try {
26+
if (!fs.lstatSync(file).isDirectory()) {
27+
return fs.readFileSync(file, {encoding: 'utf8'}).includes(match);
28+
}
29+
return false;
30+
} catch (error) {
31+
console.error(`Error reading file: ${file}\n${error}`);
32+
return false;
33+
}
34+
});
35+
};
36+
2037
const enforcePrerequisites = () =>
2138
new Promise((resolve, reject) => {
2239
if (!doFilesExist(configFiles)) {
@@ -33,6 +50,12 @@ const enforcePrerequisites = () =>
3350
return;
3451
}
3552

53+
// Ensures that server secret is not served to user
54+
if (grepRecursive(path.join(__dirname, '../assets'), secret)) {
55+
reject(new Error(`Secret is included in static assets. Please ensure that secret is unique.`));
56+
return;
57+
}
58+
3659
return resolve();
3760
});
3861

0 commit comments

Comments
 (0)