Google app engine 如何保护GAE服务器端计算逻辑?
假设我在html表单中有100个字段。填写完所有字段后,将计算一些分数并显示给用户(假设分数值为0到3000) 当用户更改任何字段中的值时,我们向他显示值范围(0-10001001-20002001-3000),没有详细的分数。但一旦按下提交按钮,将显示准确的分数 现在我需要保护逻辑-因此,用户不应该能够理解每个字段如何影响分数。此外,用户不应该使用某些程序来“玩”这些值,并查看分数是如何变化的 我正在考虑以下方法:Google app engine 如何保护GAE服务器端计算逻辑?,google-app-engine,client,client-server,Google App Engine,Client,Client Server,假设我在html表单中有100个字段。填写完所有字段后,将计算一些分数并显示给用户(假设分数值为0到3000) 当用户更改任何字段中的值时,我们向他显示值范围(0-10001001-20002001-3000),没有详细的分数。但一旦按下提交按钮,将显示准确的分数 现在我需要保护逻辑-因此,用户不应该能够理解每个字段如何影响分数。此外,用户不应该使用某些程序来“玩”这些值,并查看分数是如何变化的 我正在考虑以下方法: 使用会话 在服务器端保留分数的当前值 当一个字段中的值发生更改时,向服务器发送
还有其他(更好的)方法吗?对此没有单一的解决方案。您可能会试图让用户很难破解它,并且在未被发现的情况下这么做,并尽可能采取强制措施
- 在用户显示表单时使用“启用”cookie(或设置会话标志),并在您提交响应之前检查此特定cookie或标志。在提供响应后清除启用码,并且不允许已提交的用户提交
- 将字段名随机化,并在服务器端检查字段是否具有正确的随机名称
- 使用cookie检查用户是否已提交表单(很容易失败)
- 根据流行的HTTP库检查用户代理(并且不允许人们提交表单)
- 监控同一IP是否提交了大量内容-不精确,但可能表示有可疑之处
如果您异步地将结果发送回客户端(可能使用),并将睡眠放在TaskQueue worker中,则效果会更好。这样,应用程序引擎调度程序就不会认为您的应用程序需要生成大量实例,因为您的请求处理程序表现出很高的延迟。谢谢,Ibrahim。您能澄清一下第2项是如何实现的吗?我假设您正在使用AJAX向服务器发送请求?我将设置一个
var hasReplyBeenReceived
标志,当您发送请求时,该标志将设置为false
,并且在回调方法收到应答后将设置为true
。发送请求的函数将检查此标志,如果该标志仍然为false,则不执行请求。您还可以添加一个计时器,在大约20秒后将此值设置为true,以防服务器无法发送其回复。嗯,由于我使用jQuery,可能我可以参考ajaxStart/ajaxstop。我不熟悉jQuery,但这听起来很有用。:)