0

我正在构建一个需要一些适度繁重处理的 Ruby on Rails 应用程序。为了扩展应用程序,我正在尝试卸载浏览器上的处理。这是一个用户必须回答问题的游戏。当需要验证答案时,就会出现中等繁重的处理。为了验证答案是否正确,客户端需要存储答案,或者至少能够从服务器请求它,但在某些情况下,客户端 javascript 需要将用户的答案与正确答案进行比较。为了防止作弊,我需要在客户端确保正确答案吗?

我尝试过的事情

  1. 我尝试散列答案数据并将其嵌入 HTML,但不幸的是,我需要访问未散列的答案数据,因为它的值在处理过程中使用。
  2. 我尝试使用 AJAX 从服务器请求答案数据,但我可以使用许多工具来检查 JSON 响应并查看返回的答案数据。

认为我没有尝试过

  1. 如果我使用 SSL 加密并在需要时请求答案数据会怎样?这不会阻止用户查看自加密后返回的 JSON 数据吗?抱歉,如果我对此完全不了解,我是 Web 开发的新手,仍在学习。

是否有任何其他技术可以使用我正在使用的技术在客户端保护数据?或者任何至少使用户尽可能难以查看答案数据的技术?

非常感谢您的智慧!

4

1 回答 1

0

It's impossible. If you need the unprocessed answer data to process the input, this data has to be on the client's machine, which means it's exposed.

Let me explain that in some pseudo-code:

func isValid(myAnswer, superSecureData)
    if decode(superSecureData) == myAnswer
        return true

    return false

An attacker would only have to do :

print decode(superSecureData)

Or, better even:

return true

Of course, this would be more secure :

func isValid(myAnswer, superSecureData)
    if encode(myAnswer) == superSecureData
        return true

    return false

But, as you said, you can't hash the answer, and as I already mentioned, an attacker could still force a function to simply return true (which is why you should do server-side checks on all supposedly valid answers).

于 2012-12-02T00:15:15.857 回答