应用程序具有前端和后端模块,前端调用来自Java / Spring上编写的后端的休息服务。 是否有任何最佳实践如何检测不是由前端生成的恶意请求(如果某个用户尝试通过后端客户端从后端直接调用服务)?
可能为前端的每个请求生成一些哈希值,并在后端解密此值以验证此请求?
答案 0 :(得分:0)
您需要的是身份验证。后端需要验证前端Web应用程序或用户本身。
可能最常见的方式是验证前端,这实际上意味着前端和后端具有共享密钥,每次调用时都会进行身份验证,后端会信任前端。这可以通过无数种方式实现,从http basic auth(当然是https)到某种api密钥机制(签名请求等)。根据你的用例和威胁模型,你不必重新发明轮子, http基本身份验证可能已经足够了。
另一种方法是将用户凭据委派给后端服务。这通常通过将单点登录令牌从用户传递到后端来实现,在前端调用后端服务时有效地模仿用户。可以说这更安全,例如它不需要Web和app之间的那种信任级别,但是服务仍然需要信任发出令牌的SSO组件。关键是攻击对手没有秘密(更不用说从前端服务器,这可能是一个更容易的目标),因此攻击者可能更难以向后端服务发出请求,即使有些后端和/或前端服务器已经受到攻击。
因此,虽然我认为这里的答案不是正确的格式,可以详细了解如何进行此身份验证(确实存在多个好的解决方案,并且在每种情况下,实现细节都非常重要),至少在概念上这些你认为是你的选择。