如何保护 Restful api 免受有效载荷操纵

How to secure Restful api from payload manipulation

我想好好休息一下api,我已经在使用 JWT 对用户进行身份验证了。但是如果拥有 JWT 的用户更改了 PUT 请求的有效负载怎么办。 例如,我有一个更新 post 的放置请求。 我需要在 Body 中传递 post ID,如何防止用户更改 post ID 并在 postman 中再次发送它? 如果他有 jwt,他可以执行 put api 并更改他想要的任何 post 。我考虑过从 JWT 中提取用户 ID 并检查 Post 是否属于他。但我从未见过这样的逻辑。它是那样存在的吗?在更新之前检查要更新的对象是否属于 JWT。

您的推理是合理的:认为经过身份验证的用户不会恶意行为是天真的想法。在处理 PUT 路由的 server-side 代码中,您应该验证负载并确保经过身份验证的用户具有正确的 permissions/authority 以在实际进行更改之前在负载中执行操作代表用户。

通常的做法是在突变前读取资源。然后使用该资源的所有者 ID 从已解码令牌断言用户 ID。

我认为首先您需要验证发送到服务器的负载,然后检查用户是否有权对该项目或实体执行 PUT 请求。 在您的情况下,获取 post,检查它是否属于用户,如果它确实进行了更改,如果它没有 return 未经授权的响应(HTTP 状态代码 401 未经授权) 您也可以在访问函数逻辑之前在中间件中实现它,以检查用户是否具有这样做的权限。