【问题标题】:How secure is sending a password to the server unencrypted in GWT?向 GWT 中未加密的服务器发送密码有多安全?
【发布时间】:2012-11-20 20:12:35
【问题描述】:

在一个 GWT 应用程序中,我正在构建一个登录系统。

我已经在服务器端实现了 BCrypt。我的 User 类仅在服务器端,以保护数据。我做了以下假设,不知道是否正确:

  • 由于客户端 java 被转换为 javascript,我不应该将密码的内容保存在客户端变量中,因为它是可读的。
  • 出于同样的原因,我应该将它发送到已经散列的服务器。
  • 我不应该将我的 User 类放在 shared 中,因为我不希望它的属性可以从源代码中读取/派生。

我见过很多例子,但没有一个在将密码发送到服务器之前对其进行加密。这安全吗?

【问题讨论】:

    标签: java gwt


    【解决方案1】:

    只要您使用 HTTPS 等安全通道,将未加密的密码发送到服务器是安全的。

    出于性能原因,您还可以将相同的用户对象(不存储密码)保留在内存中,只需确保始终在服务器端对其进行验证。永远不要相信客户提供给您的用户信息。

    【讨论】:

    • 感谢您的回答!为了将 User 对象存储在内存中而无需密码,我想补充一点,您还将从中删除盐,因为您也不希望它以任何方式可用。如果没有可用的安全通道,但仍想使用盐进行散列,有什么想法吗?
    • 如果没有安全通道,您唯一的希望就是通过混淆来确保安全,而且由于客户端实际上可以访问您的所有混淆代码,因此这是一个非常糟糕的主意。
    • 我认为值得一提的是(两年后)它通过 HTTPS 是安全的,因为 HTTPS(本身)是一个加密通道。因此,当答案说“可以发送未加密的密码”时...请注意..加密仍在进行中(这就是它安全的原因)..您不需要自己手动加密。
    【解决方案2】:

    在将密码发送到服务器之前对其进行哈希处理并不能证明任何事情。 (除了可能保护用户表单在使用相同密码的其他系统上受到损害。)

    如果攻击者拥有您从客户端发送到服务器的任何内容,无论是明文、哈希还是量子脑电波,他们都拥有访问系统所需的一切。

    敏感信息需要通过加密套接字发送,然后你自己如何编码都没关系。

    【讨论】:

    • 所以您是说通过未加密连接进行的任何身份验证基本上都是不安全的?
    • 差不多,是的。如果您不信任网络,则需要使用随机密钥生成器、智能卡或类似设备的系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多