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

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

原文: https://howtodoinjava.com/javascript/mask-sensitive-info-json-logs/

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

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

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

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

解决方案在于使用函数JSON.stringify()。 此函数将 JavaScript / JSON 对象转换为 JavaScript 对象表示法(JSON)字符串表示形式。 此 JSON 字符串用于记录目的。

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

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

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

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

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

源代码

<!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>

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

学习愉快!