如何避免用户向 Flask 应用重新发送 Ajax POST 请求,覆盖数据?

问题描述 投票:0回答:1

Python Flask 应用程序渲染 HTML 页面,使用 Geolocation API 记录坐标。然后,Javascript 将此数据发布到所述 Flask 应用程序的 /submit_location 端点,以将其记录在不可公开访问的数据库中。

如何避免用户编辑并重新发送此请求以在数据库中记录虚假数据(除了不允许数据被覆盖)?

在 JSON 数据中发送秘密令牌,由端点与本地环境变量进行比较,用户可以看到,标头中的 CSRF 令牌也可以在会话期间重复使用。将请求者的 IP 限制为 localhost 只能进行欺骗。

python ajax rest flask
1个回答
0
投票

我认为您必须在服务器和客户端上执行验证,因为仅客户端措施并不能完全防止用户篡改坐标。基于哈希的消息认证码 (HMAC) 算法可以帮助服务器识别坐标是否被修改。

这通常需要使用客户端无法访问的密钥在服务器上生成 HMAC 签名,然后将其与坐标和唯一标识符(如随机数或时间戳)结合起来。如果用户拦截请求并更改坐标,他们将没有生成 HMAC 所需的密钥,因此服务器可以知道坐标已更改。

这里有一篇关于实现 HMAC 请求签名的文章:https://blog.andrewhoang.me/how-api-request-signing-works-and-how-to-implement-it-in-nodejs-2/

© www.soinside.com 2019 - 2024. All rights reserved.