我为 PHP 网站制作 API,我需要以加密形式发送登录名和用户密码。我选择了以下方法解密:
$decrypted = openssl_decrypt($user_login, 'bf-ecb', $client_id);
其中 $user_login
是一个类似于 'login:password'
的字符串。 $client_id
知道我的站点和客户端应用程序。客户端很可能是 iPhone 上的应用程序。我选择的加密算法是正常的吗,客户端用户名和密码的编码不会有问题吗?
Are normal encryption algorithm I chose, and will not be any problems on the client side with the encoding of user name and password?
您可能需要使用 WebCrypto 之类的内容确保客户端可以使用接受和实现的加密算法。您可能需要 polyfill它。
从更大的角度来看,您有两个问题需要解决。首先是网络安全模型。在 Web 安全模型中,拦截是一个有效的用例。二是违反服务器安全和密码列表。
拦截
第一个问题是由于 W3C 的理念造成的,对于 splinter 的愿景,您无能为力。 Web 安全模型的基本缺陷在 Public Key Pinning with Overrides 中变得非常清晰。 .覆盖适应了拦截,网络人努力淡化和掩盖这种行为。
您的直接防御是像您正在做的那样设置额外的安全控制。也就是说,使用加密使入侵者无法使用用户名和纯文本密码。 WebCrypto应该可以帮助你,所以你不需要 polyfill它。
但有一个潜在的问题。拦截器可以允许加密的用户名和密码通过,然后在返回给客户端时捕获cookie或 token 。所以你也需要保护 cookie。
并且需要保护用户名、密码和 cookie 免受重放攻击。您不希望攻击者获取加密的用户名和密码,然后在稍后重放它以获得经过身份验证的 session 。所以听起来它也需要盐或随机数。
数据泄露
第二个问题可以通过遵循服务器端密码存储的最佳实践来解决。为此,请参阅 OWASP 的 Password Storage Cheat Sheet和 Secure Password Storage Threat Model
关于php - 在客户端使用 openssl_encrypt 加密用户名和密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410039/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |