【问题标题】:Enforcing time-limit on the client对客户端执行时间限制
【发布时间】:2011-10-20 06:18:18
【问题描述】:

假设您有一个 Web 应用程序,并且您希望用户在特定时间限制内执行特定操作(例如,回答测验问题)。执行时间限制的最佳方法是什么?我能想到两个,各有利弊:

  • 客户端执行:有效但容易被篡改
  • 服务器端强制执行:不能被篡改,但可能由于服务器和客户端之间的延迟而导致问题

有什么想法吗?

【问题讨论】:

  • 我猜,这取决于你想强制执行什么样的时间限制。我认为,如果可以在几分钟内测量它们,延迟将不会起到太大的作用。
  • 我同意,但如果我们谈论秒(5 到 10),延迟可能是一个重要因素。

标签: language-agnostic


【解决方案1】:

我建议客户端强制执行,由服务器端健全性检查支持。您可以允许最长 30 秒的延迟,或服务器端的其他一些合理值,如果差异太大,则声明客户端篡改。

当然,这将允许客户端篡改,但仅限于您允许的特定时间。


在写完下面的评论后,我想到了以下几点:您不能相信客户端的 javascript 在页面加载时 ping 您的服务器以进行延迟计算 - 劫持它是微不足道的。但我不知道如何欺骗重定向响应。在开始测试之前,您可以获取时间戳并返回重定向响应。然后您可以在重定向页面上计算服务器端的延迟。你甚至可以做几次以获得平均值。我不知道延迟提供重定向页面请求会有多困难,但它可能会提供额外的保护层。它还可以让您提供更现实的延迟范围。

【讨论】:

  • 是的,这似乎是一个可行的解决方案。但是,如果时间限制是秒级(5 到 10),那么较大的延迟容限可能足以吸引利用,而较小的延迟容限可能不够......
  • @Mohammad 恐怕这是我能想到的最好的了。您可以尝试使用 NTP 算法 (en.wikipedia.org/wiki/…) 之类的方法对延迟进行建模,但是当一个对等方(即客户端)不受信任时,它就不起作用了。
猜你喜欢
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2014-08-19
  • 2014-01-17
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多