【问题标题】:Is password encryption required in frontend(client browser) for HTTPS protocol?HTTPS 协议的前端(客户端浏览器)是否需要密码加密?
【发布时间】:2015-12-07 03:50:05
【问题描述】:

如标题所示,

环境:密码已经在数据库中散列,使用HTTPS协议连接

我的问题很简单,通过 HTTPS,我看到一些网站使用 SSL,但在提交表单时也在前端(客户端浏览器)进行密码加密。

需要吗?

在我看来,因为网站使用 SSL。无需在前端(客户端浏览器)中加密密码。因为无论前端(客户端浏览器)做什么,黑客也可以通过使用库(客户端浏览器导入 javascript 散列算法)来加密和发送令牌。即使放盐也少了点,这只是黑客加密它的额外步骤。

除非盐来自其他方式,而不是来自同一来源(来自服务器的页面渲染)。示例:来自移动设备,然后使用 otp 作为盐即可解决。

否则我认为加密在前端(客户端浏览器)中没有用。

我说的对吗?或者我错过了什么......

【问题讨论】:

  • 旁注:您可能在不寻常的意义上使用“前端” - 更常见的是使用“客户端/浏览器” -> 前端(服务器端渲染逻辑) -> 后端(数据库/服务)。
  • 任何客户端加密/解密算法和密钥都将公开可用,这意味着加密密码可以比使用私钥(年)更容易(秒)解密。如果连接被破坏,除了嗅探器的轻微烦恼之外,几乎没有安全收益。 SSL 使用私钥进行 RSA 加密,您应该能够假设 SSL 连接可以安全地传递数据(例如明文密码)。 仍然加密/散列您的密码,只需在服务器端进行。
  • @PaulS。 “仍然加密/散列您的密码”是​​指让 SSL 进行加密就足够了吗?

标签: javascript ssl encryption https password-encryption


【解决方案1】:

问题是,网站除了信任 HTTPS/SSL 连接之外别无选择。无论您在客户端(浏览器)上进行何种加密,都将在 JavaScript 中完成,并且该脚本必须首先发送到客户端。 ManInTheMiddle 可以像您的客户一样做同样的事情,或者他可以简单地删除整个脚本。

当你和你的同事试图发明一种秘密语言时,你也遇到了同样的问题,而坏人却在听。如果您还没有分享秘密,这是不可能的。 SSL 证书解决了这个问题,因为浏览器内置了一个根证书列表,它将作为已经共享的密钥

对于具有客户端和服务器部分的应用程序,情况略有不同。在那里,您可以为您的应用安装一个密钥,并根据这个已经共享的密钥,您可以建立一个安全连接。

所以简短的回答是:是的,可以发送密码明文,只要连接使用 HTTPS/SSL 加密。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2019-08-18
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多