屏蔽参数中的敏感字段

Posted by ngtmuzi on 2017-04-01
神秘代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const pwdFields = ['password','pwd'];

function filterPwdField(obj) {
return lodash.mapValues(obj, (value, key) => {
if (lodash.isPlainObject(value))
return filterPwdField(value);

if (typeof value === 'string') {
if (pwdFields.some(field => value.toLowerCase().includes(field.toLowerCase()))) { //屏蔽类似password=xxxxx的字符串
pwdFields.forEach(field =>
value = value.replace(new RegExp(`(${field})=(.+?)(&|$)`, 'gi'), (match, $1, $2, $3) =>
`${$1}=${$2.slice(0, -5) + '*****'}${$3 || ''}`
));
}

if (pwdFields.some(field => key.toLowerCase().includes(field.toLowerCase())))
value = value.slice(0, -5) + '*****'; //密码字段做屏蔽
}
return value;
});
}