如何验证请求标头是否由特定的Web应用程序添加了

时间:2020-01-17 13:10:04

标签: security encryption web-applications digital-signature owasp

当前,我正在从事一个要求高度安全的项目。由于最近的一些需求更改,我们使用前端http拦截器为每个请求添加了一些特殊的标头(否则它将在前端模块中发生巨大变化),它们对于系统至关重要。

最近,我们发现可以使用一些浏览器插件来修改这些标头,这是一个关键问题。因此,我需要一种方法来识别这些标头是否包含从前端添加的原始值,并且它们没有被修改。

这些标题值的暴露不是大问题。但是修改是。

我的解决方案:

1)每次模块初始化时,都会生成RSA密钥对,并将公钥发送到具有该选项卡唯一ID的后端服务。

2)将私钥保留在前端的服务中,并创建一个公共函数来为给定的输入生成签名。

3)每次调用前端拦截器时,它都会根据各自的标头值计算一个签名值,并将其附加为另一个标头值。

4)当每个请求到达api网关时,它将使用在应用初始化阶段保存的公钥来验证签名。

上述解决方案是否存在安全隐患。如果有更好的方法来解决上述问题,欢迎提出建议:)

1 个答案:

答案 0 :(得分:0)

考虑使用JWT发送那些标头...您可以使用对称签名(例如:HS256)或非对称签名(例如:RS256),具体取决于您同时拥有前端和后端的所有权,还是前端是公共的。

有关创建和验证JWT的更多详细信息,请参阅https://jwt.io/

从细节上,您已经提供了这,这就是我的想法。为了准确地工作,您没有提供它是Web api还是web应用程序等。