我正在使用django开发一个网站。在服务器端,我需要传输一些必须在第二台服务器(在另一台机器上)处理的数据。然后,我需要一种方法来检索处理后的数据。我认为最简单的方法是将 POST 请求发送回 Django 服务器,然后在专用于该作业的视图上处理该请求。
但我想为此过程添加一些最低安全性:当我将数据传输到另一台机器时,我想将随机生成的令牌加入其中。当我取回处理后的数据时,我希望也取回相同的令牌,否则请求将被忽略。
我的问题是:如何将生成的令牌存储在 Django 服务器上?
- 我可以使用全局变量,
- 但我的印象是在网上到处浏览,出于安全原因,不应该使用全局变量(并不是我真的明白为什么)。
- 我可以将令牌存储在磁盘/数据库中,但这似乎是对性能的不合理浪费(即使在实践中它可能不会有太大变化)。
有没有第三种解决方案,或者使用Django做这样的事情的规范方法?
您可以将令牌存储在 django 缓存中,在大多数情况下,从数据库或磁盘存储会更快。
另一种方法是使用 redis。
您还可以计算您的代币:
- 在两个服务器的设置中保存一些随机令牌
-
根据舍入到 10 秒的当前时间戳计算令牌,例如使用:
token = hashlib.sha1(secret_token)token.update(str(rounded_timestamp))token = token.hexdigest()
如果 POST 请求时在远程服务器上生成的令牌 - 与本地服务器上生成的令牌匹配,则在获得响应时,请求有效并且可以处理。
简单明显的解决方案是将令牌存储在数据库中。其他可能的解决方案是 Redis 或类似的东西。最后,你可以看看像芹菜这样的分布式异步任务队列......