Spring Boot REST应用程序-加密和解密某些JSON字段-我如何从技术上实现一对一的解决方案



在我们的基于web的应用程序(Spring Boot REST应用程序中,我们需要找到一种优化的方法来模糊/加密某些JSON字段,如电话号码、信用卡号、电子邮件、税务id等。这一要求是由安全原因驱动的,正如我们所谈论的电子银行一样。我们不希望敏感数据在屏幕上或访问F12的"网络"选项卡时显示为原始数据。我们提出了一些高级想法,例如:

  • 混淆/加密每个微服务中的字段
  • 当呼叫流返回EDGE服务时,字段的混淆/加密(所有请求都到达那里(。包含模糊/加密字段的请求显然会在后端解密

从技术上讲,我们如何才能真正做到这一点

关于此事的一些额外信息如下:

  • 对敏感字段使用加密或标记化之间的选择目前是一个实现细节。然而,欢迎您集思广益,讨论您认为哪一个最适合所描述的情况
  • 如果我们继续混淆敏感字段,那么客户端将只能显示这些字段(例如,显示屏蔽的卡号(。如果客户端(用JS Redux编写的前端部分(需要使用X值,那么模糊的值将是无用的。因此,我们考虑将模糊字段和散列字段(原始值的散列(一起包含到客户端(以及与上述问题无关的其他字段(。如果客户端确实需要使用该值,它将继续解密相关字段,然后使用它
  • 要混淆/加密的字段可以添加到相关的application.yml中,这样我们就可以动态地添加或删除它们

提前非常感谢。

这可能比Stack Overflow更像是一个信息安全或软件工程问题:

TL;DR:

浏览器不能信任您的服务器端机密。

不要试图加密数据以便在前端使用。如果他们需要解密,那么API的任何用户都可以做同样的事情,因为你必须向他们发送这样做的手段。你什么也得不到,并可能为攻击者开辟新的途径。

它已经在传输中加密了(它使用TLS,对吧?(,如果他们不需要看到数据,就不要发送它;某事";需要发送,屏蔽它(即以符合PCI的方式使用信用卡(,并使用不透明的标识符(即随机UID(允许客户端以某种方式处理敏感数据而不泄露。例如,你的API可以退回这样的信用卡:


"credit_card": { "number" : "4509-XXXX-XXX1-2334", "id" : "a34tfa46a"},

如果用户选择了相同的数据,或者其他什么,他们可以发回相同的数据。

加密发送到浏览器的数据的唯一原因是使服务器端无状态——服务器加密数据,以便客户端将其发送回服务器,浏览器实际上永远不会获得明文。

相关内容

最新更新