【问题标题】:Sending hash password to WebAPI向 WebAPI 发送哈希密码
【发布时间】:2016-05-18 07:01:53
【问题描述】:

我有一个运行良好的 WebAPI 应用程序。登录、注册等都没有问题。但是,我遇到了一些需要注意的问题。当有人注册或登录时,他们的密码以纯文本形式发送。我知道我们可以申请 HTTPS 证书,这将得到解决。但是,我更多的是寻找一种可以散列密码并且 WebAPI 可以自动提取密码的解决方案。我不打算对内置的 WebAPI 功能进行更改以散列和存储 PW。这也是为了确保当我使用 FF 或 Chrome 开发人员工具时,没有人可以从正在发送的数据中读取 PW。

我正在使用 Angular 或 JQuery AJAX 调用我的 WebAPI。

【问题讨论】:

  • 任何双向加密都可以撤消,而且一开始就不是很安全。您确实应该使用 SSL 传输用户帐户数据。
  • 发送散列密码并没有多大好处;哈希本身成为有效密码。
  • 如果你的攻击者可以在客户端页面上使用 devtools,你就已经输了。
  • 谢谢各位...我完全理解不使用 SSL 的后果。但是,我想知道,例如如果我坐在某人旁边并使用开发工具排除故障,那么该人可以清楚地看到我的密码是什么,因为它在请求正文中可见。我一开始就试图避免这种情况。

标签: javascript jquery angularjs hash asp.net-web-api2


【解决方案1】:

可以在前端加密密码并将散列密码和盐+轮(如果使用)发送到服务器。

当用户尝试登录时出现问题,您需要将盐和四舍五入到前端,散列他们的密码(输入的)将其发送到服务器,在那里您可以像hashedPassword == hashedPassword 和返回真/假。

所以在我看来,这比只在服务器端做所有事情更不安全。唯一的好处是,没有人可以在您的开发工具或有效负载中看到您的密码。

【讨论】:

  • 感谢您的解释。我更多地寻找一种方法,我不必更改 WebAPI 的内置代码以在 DB 中进行散列和存储。我尝试了几个 javascripts 哈希方法,如 SHA1 和 md5,它们成功地对 pw 进行了哈希处理,但它没有通过 WebAPI 进行验证。
  • 我假设您使用 ASP Identity 2.0(或其他一些用户管理框架)。在那里,您必须设置一个选项,其中密码不在服务器端散列(因为它已经散列)。所以这只是配置,而不是覆盖代码。
  • 谢谢@kadoga。我会看看那个选项。顺便说一句,我是否需要为我的 WebAPI 分配一个 SSL 证书,或者我的 API 的每个用户都需要为他们自己的站点分配一个证书才能发送加密信息(我猜是后者)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2010-12-03
  • 2012-07-07
  • 1970-01-01
  • 2023-04-08
  • 2015-11-30
  • 2018-01-31
相关资源
最近更新 更多