【问题标题】:Encrypting username and password using openssl_encrypt on client side?在客户端使用 openssl_encrypt 加密用户名和密码?
【发布时间】:2016-07-24 10:20:07
【问题描述】:

我为 PHP 网站制作 API,我需要以加密形式发送登录名和用户密码。我选择了以下方法解密:

$decrypted = openssl_decrypt($user_login, 'bf-ecb', $client_id);

其中$user_login 是一个类似于'login:password' 的字符串。 $client_id 知道我的站点和客户端应用程序。客户端很可能是 iPhone 上的应用程序。我选择的加密算法是正常的吗,客户端用户名和密码的编码不会有问题吗?

【问题讨论】:

  • 您应该为您的站点/网络服务器正确配置 TLS/HTTPS,它将加密所有客户端API 数据。
  • 我不用担心如何编码登录名和密码?
  • 整个连接加密后,您不需要另外加密登录名和密码,不。您当然必须store a hash of the password 服务器端,而不是实际的纯文本密码。但这与数据传输无关。

标签: php ios encryption openssl php-openssl


【解决方案1】:

我选择的加密算法是普通的吗,客户端的用户名和密码的编码不会有问题吗?

您可能需要使用WebCrypto 之类的东西来确保客户端可以使用接受和实施的加密算法。你可能需要polyfill它。

从更大的角度来看,您有两个问题需要解决。首先是网络安全模型。在 Web 安全模型中,拦截是一个有效的用例。二是违反服务器安全和密码列表。


拦截

第一个问题是由于 W3C 的理念造成的,对于破碎的愿景,您无能为力。通过Public Key Pinning with Overrides,Web 安全模型的基本缺陷变得非常清晰。覆盖适应了拦截,网络人努力淡化和掩盖这种行为。

您的直接防御是像您正在做的那样设置额外的安全控制。也就是说,使用加密使闯入者无法使用用户名和纯文本密码。 WebCrypto 应该可以帮助你,所以你不需要polyfill 它。

但有一个潜在的问题。拦截器可以允许加密的用户名和密码通过,然后在返回给客户端时捕获cookie或令牌。所以你也需要保护 cookie。

并且需要保护用户名、密码和 cookie 免受重放攻击。您不希望攻击者获取加密的用户名和密码,然后在稍后重放它以获得经过身份验证的会话。所以听起来它也需要盐或随机数。


数据泄露

第二个问题可以通过遵循服务器端存储密码的最佳实践来解决。为此,请参阅 OWASP 的 Password Storage Cheat SheetSecure Password Storage Threat Model

【讨论】:

  • 服务器将如何保护它使用的加密密钥和私钥?
猜你喜欢
  • 1970-01-01
  • 2020-06-05
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2014-09-01
  • 1970-01-01
相关资源
最近更新 更多