目前我正在做一个需要高安全性的项目。由于最近的一些需求变化,我们使用前端 http 拦截器为每个请求添加了一些特殊的标头(否则它将成为前端模块的巨大变化(,它们对系统非常关键。
最近我们观察到可以使用某些浏览器插件修改这些标头,这是一个关键问题。因此,我需要一种方法来确定这些标头是否包含从我的前端添加的原始值并且它们没有被修改。
这些标头值的公开不是一个大问题。但修改是。
.
.
我的解决方案:
1( 每次模块初始化时生成一个 RSA 密钥对,并将公钥发送到具有该选项卡唯一 ID 的后端服务。
2(将私钥保存在我的前端的服务中,并创建一个公共函数来为给定的输入生成签名。
3(每次调用前端拦截器时,它都会根据各自的标头值计算一个签名值,并将其作为另一个标头值附加。
4( 当每个请求到达 api 网关时,它将使用应用程序初始化阶段保存的公钥验证签名。
.
我的上述解决方案是否存在安全风险。如果有更好的方法解决上述问题,欢迎提出建议:)
考虑使用 JWT 发送这些标头...您可以使用对称签名(例如:HS256(或非对称签名(例如:RS256(,具体取决于您是否同时拥有前端和后端的所有权或前端是公共的...
有关创建 JWT 和验证它的更多详细信息,请参阅 https://jwt.io/
从您提供的细节来看,这就是我得到的想法......对于确切的工作,您没有提供它是 Web API 还是 Web 应用程序等。