Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在客户端保护数据的技术_Javascript_Html_Ruby On Rails_Security - Fatal编程技术网

Javascript 在客户端保护数据的技术

Javascript 在客户端保护数据的技术,javascript,html,ruby-on-rails,security,Javascript,Html,Ruby On Rails,Security,我正在构建一个RubyonRails应用程序,它需要一些中等强度的处理。为了扩展应用程序,我尝试在浏览器上卸载处理。这是一个用户必须回答问题的游戏。当需要验证答案时,会进行中等强度的处理。为了验证答案是否正确,客户端需要存储答案,或者至少能够从服务器请求答案,但在某些情况下,客户端javascript需要将用户的答案与正确答案进行比较。为了防止作弊,我需要确保客户端的正确答案 我尝试过的事情 我尝试对答案数据进行散列并将其嵌入HTML中,但不幸的是,我需要访问未散列的答案数据,因为它的值在处理过

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

我尝试过的事情

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

  • 如果我使用SSL加密并在需要时请求应答数据会怎么样?这是否会阻止用户查看返回的JSON数据,因为它是加密的?很抱歉,如果我对这个完全不了解,我对网络开发还不熟悉,还在学习
  • 使用我正在使用的技术在客户端保护数据是否还有其他技术?或者至少让用户尽可能难以查看答案数据的任何技术


    非常感谢你的智慧

    这是不可能的。如果您需要未处理的应答数据来处理输入,则该数据必须位于客户机上,这意味着它已公开

    让我用一些伪代码解释一下:

    func isValid(myAnswer, superSecureData)
        if decode(superSecureData) == myAnswer
            return true
    
        return false
    
    攻击者只需执行以下操作:

    print decode(superSecureData)
    
    或者,更好的是:

    return true
    
    当然,这会更安全:

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

    但是,正如您所说,您不能散列答案,正如我已经提到的,攻击者仍然可以强制函数简单地
    返回true
    (这就是为什么您应该对所有假定的有效答案进行服务器端检查)。

    +1-黄金法则是,您不能信任客户端所说的任何内容。那么,让它变得困难如何?我刚刚读到有人使用编译过的java小程序处理同样的问题。有一个在客户端运行的软件很难破解的例子。您的想法?SSL加密在客户端和服务器之间加密数据,但两者都可以完全访问数据。是的,这是可能的,但这就是你所能做的。谢谢你,汤姆!这是有道理的。你有什么建议让它变得困难吗?在服务器上执行逻辑,但尽可能优化内部逻辑。如果您真的害怕扩展问题,请尝试缓存可能的答案,并在前端执行所有逻辑(以便数据库服务器跨多个前端扩展)。这样你就可以水平伸缩了。