Add security check (#7247)
* added Parse Server security option * added SecurityRouter * added Check class * added CheckGroup class * moved parameter validation to Utils * added CheckRunner class * added auto-run on server start * added custom security checks as Parse Server option * renamed script to check * reformat log output * added server config check * improved contributing guideline * improved contribution guide * added check security log * improved log format * added checks * fixed log fomat typo * added database checks * fixed database check * removed database auth check in initial version * improved contribution guide * added security check tests * fixed typo * improved wording guidelines * improved wording guidelines
This commit is contained in:
47
src/Security/CheckGroups/CheckGroupDatabase.js
Normal file
47
src/Security/CheckGroups/CheckGroupDatabase.js
Normal file
@@ -0,0 +1,47 @@
|
||||
/**
|
||||
* @module SecurityCheck
|
||||
*/
|
||||
|
||||
import { Check } from '../Check';
|
||||
import CheckGroup from '../CheckGroup';
|
||||
import Config from '../../Config';
|
||||
import Parse from 'parse/node';
|
||||
|
||||
/**
|
||||
* The security checks group for Parse Server configuration.
|
||||
* Checks common Parse Server parameters such as access keys.
|
||||
*/
|
||||
class CheckGroupDatabase extends CheckGroup {
|
||||
setName() {
|
||||
return 'Database';
|
||||
}
|
||||
setChecks() {
|
||||
const config = Config.get(Parse.applicationId);
|
||||
const databaseAdapter = config.database.adapter;
|
||||
const databaseUrl = databaseAdapter._uri;
|
||||
return [
|
||||
new Check({
|
||||
title: 'Secure database password',
|
||||
warning: 'The database password is insecure and vulnerable to brute force attacks.',
|
||||
solution: 'Choose a longer and/or more complex password with a combination of upper- and lowercase characters, numbers and special characters.',
|
||||
check: () => {
|
||||
const password = databaseUrl.match(/\/\/\S+:(\S+)@/)[1];
|
||||
const hasUpperCase = /[A-Z]/.test(password);
|
||||
const hasLowerCase = /[a-z]/.test(password);
|
||||
const hasNumbers = /\d/.test(password);
|
||||
const hasNonAlphasNumerics = /\W/.test(password);
|
||||
// Ensure length
|
||||
if (password.length < 14) {
|
||||
throw 1;
|
||||
}
|
||||
// Ensure at least 3 out of 4 requirements passed
|
||||
if (hasUpperCase + hasLowerCase + hasNumbers + hasNonAlphasNumerics < 3) {
|
||||
throw 1;
|
||||
}
|
||||
},
|
||||
}),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CheckGroupDatabase;
|
||||
Reference in New Issue
Block a user