2016-11-08 122 views
-1

我想屏蔽/隐藏只有json值不是键。 对于防爆: -屏蔽节点中的敏感信息

myObject = {"Name":"value1","Phoneno":"545454545445"} 
Output should be like below: 
myObject = {"key1":***** 

***,"key2":*****} 

能否请你告诉我,我们如何能在做的NodeJS这个? 谢谢。

回答

0

如何:

let myObject = { "Name": "value1", "Phoneno": "545454545445" }; 
let output = {}; 

function mask(value: string) { 
    let maskedValue = ""; 
    for (let i = 0; i < value.length; i++) { 
     maskedValue += "*"; 
    } 

    return maskedValue; 
} 

Object.keys(myObject).forEach(key => { 
    output[key] = mask(myObject[key]); 
}); 

console.log(output); // Object {Name: "******", Phoneno: "************"} 

code in playground

+0

谢谢,这是工作。但是如果JSON如下所示 – tiya

+0

像下面那样?下面是什么?我不明白 –

0

以下策略使用一个for...in循环遍历对象,用星号的链替换所有的属性值。

const myObject = {"Name": "value1", "Phoneno": "545454545445"}; 
 

 
const mask = obj => { 
 
    const masked = {}; 
 
    for (let key in obj) masked[key] = "*****"; 
 
    return masked; 
 
}; 
 

 
console.log("original:", myObject); 
 
console.log("masked:", mask(myObject));

如果你想屏蔽值是星号,但同样长度的原始(而不是恒定的长度),该for...in循环更改为以下:for (let key in obj) masked[key] = "*".repeat(obj[key].length);

UPDATE:屏蔽嵌套对象(甚至阵列)

在你的意见,你问有关在嵌套对象屏蔽值。

为了处理一个嵌套的对象,甚至是任何嵌套排列的对象和/或数组的组合,您可能需要递归。简而言之,如果当前值是一个原始值(例如一个字符串,一个数字,一个布尔值等),那么将其替换为虚拟字符串,但是如果当前值是一个对象本身(或一个数组),那么重新 - 从一开始就将这个值发回掩蔽过程。

以下示例显示了可能完成的一种方式。我用jQuery来检测一个值是一个普通的对象还是一个数组。在这个例子中,对象属性名称以“A”,“B”,“C”等结尾。 ["foo", "bar"]将被转换为{"0": "*****", "1": "*****"}

const myObject = {propA: "a", propB: {propBA: "ba", propBB: "bb"}, propC: ["c0", "c1"], propD: {propDA: "da", propDB: {propDBA: "dba", propDBB: "dbb"}, propDC: ["dc0", "dc1"]}, propE: ["e0", {propE1A: "e1a", propE1B: "e1b"}, ["e20", "e21"]]}; 
 

 
const mask = objOrArr => { 
 
    const masked = {}; 
 
    for (let key in objOrArr) { 
 
    const val = objOrArr[key]; 
 
    if ($.isPlainObject(val) || $.isArray(val)) { 
 
     masked[key] = mask(val); 
 
    } else { 
 
     masked[key] = "*****"; 
 
    } 
 
    } 
 
    return masked; 
 
}; 
 

 
console.log("original... ", myObject); 
 
console.log("masked... ", mask(myObject));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

我不确定使用占位符的确切对象的值长度是一个好主意。在我看来,使用静态占位符会更好。由于它被掩盖,无论如何价值多长时间都没关系。 – Vernon

+1

@Vernon,够了。将代码更改为'for(let key in obj)masked [key] =“*****”;'。使它更简单。 ...将你的建议纳入我的答案。 –

+0

谢谢大家但是如果obect是象下面这样:让myObject的= { 标题:{ ID: “1234”, 名称: “XYZ”, 用户名: “ABC”, 域: “R”, 来源:“abc”, MessageVersion:“1。0" , SendDateTime:日期 }, 客户:{ 事件: “1234” } }; – tiya

1

也许你会发现有用的库https://github.com/tcdl/json-masker它允许你这样做:

const mask = require('json-masker'); 
const myObject = {"Name": "value1", "Phoneno": "545454545445"}; 
const masked = mask(myObject); // will produce: 
           // {"Name": "xxxxx*", "Phoneno": "************"}