首页 > 解决方案 > 如果 jwt 被盗,将用户的公共 IP 保存在我的 API 中是否可行?

问题描述

我正在考虑如何保护我的 API 并防止令牌盗窃影响我的用户。我认为如果攻击者设法窃取令牌并被具有不同 IP 的人使用,那么保存我的用户 IP 将是一个好主意。我将使用中间件或函数来验证它是否在用户 ip 列表中,如果不是,我将拒绝他的令牌,然后在前端询问您的凭据。如果凭据正确,我将覆盖 IP 或将其存储为新的。

标签: node.jsapisecurityjwtip

解决方案


我不知道您所说的“是否可行”到底是什么意思。是的,如果你愿意,你可以做到。

但是,依赖用户的 IP 地址不发生变化并迫使他们在每次发生变化时重新进行身份验证存在很多潜在问题。

1. 移动设备四处移动。 随着移动设备在蜂窝网络上移动,它们的 IP 地址可以合法地更改。

2. 连接不同网络的移动设备(如WiFi)。 随着您的手机从在您的汽车和蜂窝网络中变为在家中和您的 WiFi 网络中,该手机连接到您的服务的 IP 地址将发生变化。

3. 某些防火墙后面的 NAT。 几乎每个用户(甚至家庭用户)都在通过 NAT 设备,而您看到的 IP 地址是网关的 IP 地址,而不是实际用户的 IP 地址。在较大的公司网络中,网关 IP 地址可能并不总是相同。而且,多个不同的用户可能看起来来自同一个网关 IP 地址,因此用户和 IP 地址之间不一定存在一一对应关系。


一般来说,您应该只对传输 JWT 的所有连接使用 https,这样中间人攻击窃取 JWT 的风险很小。用户自己需要保护自己的 JWT 本地存储。

许多现代服务使用的一种方法是通过记录本地设备的一组特征来对本地设备进行指纹识别,这些特征甚至可能包括一些其他 cookie 的存在以及许多其他浏览器特征。然后,每当指纹发生重大变化时,您都需要重新进行身份验证。您会看到许多银行和航空公司网站都在做类似的事情。这里的想法是,即使凭据被盗,当攻击者使用凭据时,指纹也不太可能匹配。


推荐阅读