提问人:Eltac Shikhsaidov 提问时间:5/15/2023 更新时间:5/16/2023 访问量:46
防止从不同设备发送请求
Preventing to send requests from different devices
问:
我有一个带有登录端点的Spring Boot项目,该项目会生成用于访问其他端点的令牌。当用户从特定设备(浏览器或应用程序)登录时,我想添加一项安全措施,以防止生成的令牌在其他设备上使用。换言之,令牌应仅对生成令牌的设备有效。
例如:
用户从设备 X 登录并收到类似 ************** 的令牌。 如果用户尝试使用设备 Y 或任何其他设备中的相同令牌,则应拒绝对终结点的访问。 目前,我已经实现了一个 AllRequestFilter 类来过滤所有请求。如何将此特定于设备的安全性添加到我的应用程序中?
以下是我的一些具体要求:
- 令牌应绑定到生成它的设备,防止其在其他设备上使用。
- 该解决方案应适用于基于浏览器的登录和来自移动应用程序的登录。
- 我想在 API 级别实现此安全措施,而不是依赖客户端的设备标识。
有关如何在我的Spring Boot应用程序中实现此特定于设备的安全功能的任何建议或想法,我将不胜感激。先谢谢你!
答:
我要直接写出来。
你不能。
你应该放弃这个。只需按照给定的标准(如 oauth2 等)实现安全性,不要尝试实现自定义内容。
让我们看看您的要求:
- 令牌应绑定到生成它的设备,防止其在其他设备上使用。
为此,服务器需要确切地知道设备在生成时是谁,我们如何保证它是它声称的设备?好吧,除非我们从一些严肃的指纹识别开始,否则我们不能从设备本身收集大量数据点并将其存储在服务器端。在欧洲,收集这些信息可能侵犯隐私并违反 GDPR 规则,并处以巨额罚款。
- 该解决方案应适用于基于浏览器的登录和来自移动应用程序的登录。
设备可以被欺骗,浏览器可以被欺骗。这也意味着,每次用户切换计算机或浏览器时,您都需要再次对其进行指纹识别,这是对隐私的高度侵犯。
- 我想在 API 级别实现此安全措施,而不是依赖客户端的设备标识。
你在这里的要求基本上是不可能的。所以你想确保某些东西只在特定设备上工作,但你只想在服务器端编写代码?
A. 一般性讨论
来自客户端的任何内容都可能被欺骗。这就是为什么我们有密码和强大的加密密钥,因为这是我们唯一不能欺骗的东西。客户端/设备等的其他一切都可以伪造,因此您不可能拥有这样的安全性。
- 密码可能被盗、泄露
- 设备可能被欺骗
- 证书 (mTLS) 可能被盗
- 在不告知客户原因的情况下进行数据指纹识别,您应该有非常充分的理由这样做,否则是非法的、不道德的并且违反了 GDPR。
所以再一次。放弃这个想法。实现 oauth2 并收工。
评论