【问题标题】:Encrypt A String With JavaScript And Decrypt It From Server Side (Java)使用 JavaScript 加密字符串并从服务器端解密 (Java)
【发布时间】:2013-10-15 12:07:24
【问题描述】:

我需要在客户端加密一个字符串并将其发送到服务器。 在那里我需要解密它。

Using Password-Based Encryption是最好的解决方案吗?

我需要它,因为我有一个投票机制,我可以发送 ajax 帖子来对条目进行投票。 此机制使用当前用户的 Facebook id。我的目标是从客户端加密 FB id,以避免他们通过发送具有不同 id 的请求来破解它。 如果发送第二个具有相同 id 的帖子,我将阻止投票。

一旦 id 被解密,我将使用图表检查它是否是真正的 FB 用户。

【问题讨论】:

  • 请注意,在这种情况下加密对您没有帮助,他们将能够复制您的加密并将其发送到他们想要的任何 id 的服务器。
  • 连接到用户的会话可能是一个想法。

标签: java javascript facebook encryption


【解决方案1】:

Javascript 加密在这里无济于事。任何优秀的侦探/黑客都可以看到这一切是如何在客户端完成的,查看数据在加密之前是什么,以及它是如何加密的。

防止用户多次投票的唯一方法是将投票绑定到一个帐户或令牌,您既可以在您的服务器上进行验证,也可以将其绑定到某个特定用户,该用户不容易进行抽签不同的账户。一般来说,您可能无法完全阻止这种情况,但您可以通过使其需要足够多的步骤(包括某种验证码,使其无法自动化)来制造足够多的麻烦,大多数人都不会这样做。

SSL 将保护客户端/服务器通信,但不会做任何事情来阻止客户端做您不希望他们做的事情。

【讨论】:

  • 我所有的 cmets 结合在一起,在答案中表现得更好,非常好! :)
【解决方案2】:

“加密”在这里没有任何意义,正如您已经被告知的那样(因为在客户端加密的值可以在您加密它之前被操纵),当然 SSL 确实如此也解决不了这个问题。

改为将用户的访问令牌发送到服务器。然后使用它(/me)或debug it 请求用户数据 - 然后您将知道该请求是真实的,因为用户不能“伪造”另一个用户的访问令牌。

【讨论】:

    【解决方案3】:

    考虑到没有身份验证,可以使用 HTTP 指纹来检查具有不同 userId 的请求是否来自同一用户。

    指纹将从 HTTP 请求数据创建,例如:

    -用户代理
    -语言
    -IP
    -字符集

    以及 http 请求中存在的其他数据。

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2012-07-29
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2013-09-27
      • 2013-08-19
      相关资源
      最近更新 更多