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