# JavaScript 日志 – 在 JSON 中屏蔽敏感信息

> 原文： [https://howtodoinjava.com/javascript/mask-sensitive-info-json-logs/](https://howtodoinjava.com/javascript/mask-sensitive-info-json-logs/)

屏蔽敏感信息是处理敏感客户数据的应用的非常实际的需求。 例如，银行应用。 当这些应用在组织内部网中运行时，会多次生成 UI 日志并将其存储在用户的计算机上以进行调试。

在上述情况下，监管要求屏蔽所有此类敏感信息，以使它们不存储在用户的计算机中。 在本教程中，我们将学习对此类敏感信息应用屏蔽。

我假设数据通知 JSON 对象，而敏感信息是以其属性的形式出现的。

## 结合使用`JSON.stringify()`和`replacer`函数

解决方案在于使用函数[`JSON.stringify()`](https://docs.microsoft.com/en-us/scripting/javascript/reference/json-stringify-function-javascript)。 此函数将 JavaScript / JSON 对象转换为 JavaScript 对象表示法（JSON）字符串表示形式。 此 JSON 字符串用于记录目的。

```java
JSON.stringify(  value [, replacer] [, space] )
```

这里`value`是要进行字符串化的对象，`replacer`是可以转换结果的函数。 在遍历完整对象时，将为 JSON 对象的每个属性调用此`replacer`函数。 在`replacer`函数中，您可以在键值对中获得属性（即，属性名称和属性值）。

使用此替换器函数可屏蔽敏感信息。

例如，在下面的示例中，我屏蔽了`accountNumber`字段。 您可以根据项目需要自定义函数`maskInfo`。

```java
var unmaskedData = { "name":"Lokesh", "accountNumber":"3044444444", "city":"New York"};

var maskedData = JSON.stringify( unmaskedData, maskInfo );

function maskInfo (key, value) {
    var maskedValue = value;
    if (key == "accountNumber") 
    {
    	if(value && value.length > 5) {
    		maskedValue = "*" + maskedValue.substring(value.length - 4, value.length);
    	} else {
    		maskedValue = "****"; 
    	}
    }
    return maskedValue;
}

Output:

{
	"name": "Lokesh",
	"accountNumber": "*4444", //Masked account number
	"city": "New York"
}

```

## 数据屏蔽实时演示

<https://howtodoinjava.com/wp-content/downloads/maskingDemo.html>

#### 源代码

```java
<!DOCTYPE html>
<html>
<body>

<h2>JavaScript - Mask Sensitive Information Demo</h2>

<p>Input JSON payload in left box and press submit button. Masked data will appear on right box.</p>

<table>
	<tr>
		<th>Unmasked Data</th>
		<th>Masked Data</th>
	</tr>
	<tr>
		<td><textarea id="unmasked" rows="10" cols="30">{ "name":"Lokesh", "accountNumber":"3044444444", "city":"New York"}</textarea></td>
		<td><textarea id="masked" rows="10" cols="30"></textarea></td>
	</tr>
	<tr><td colspan="2"><input type="button" name="submit" value="Submit" onclick="submit()"></td></tr>
</table>

<script>

	function submit() {
		var unmaskedData = JSON.parse(document.getElementById("unmasked").value);

		var maskedData = JSON.stringify(unmaskedData, maskInfo, ' ');

		document.getElementById("masked").value = maskedData;
	}

	function maskInfo(key, value) 
	{
		//Default value is same as original
		var maskedValue = value;

		if (key == "accountNumber") 
		{
			if(value && value.length > 5) {
				maskedValue = "*" + maskedValue.substring(value.length - 4, value.length);
			} else {
				maskedValue = "****"; 
			}
		}
		return maskedValue;
	}

</script>

</body>
</html>

```

将我的问题放在评论部分。

学习愉快！