菜鸟教程小白 发表于 2022-12-13 15:49:27

php - 在客户端使用 openssl_encrypt 加密用户名和密码?


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

<pre><code>$decrypted = openssl_decrypt($user_login, &#39;bf-ecb&#39;, $client_id);
</code></pre>

<p>其中 <code>$user_login</code> 是一个类似于 <code>'login:password'</code> 的字符串。 <code>$client_id</code> 知道我的站点和客户端应用程序。客户端很可能是 iPhone 上的应用程序。我选择的加密算法是正常的吗,客户端用户名和密码的编码不会有问题吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><blockquote>
<p>Are normal encryption algorithm I chose, and will not be any problems on the client side with the encoding of user name and password?</p>
</blockquote>
<p>您可能需要使用 <a href="http://www.w3.org/TR/WebCryptoAPI/" rel="noreferrer noopener nofollow">WebCrypto</a> 之类的内容确保客户端可以使用接受和实现的加密算法。您可能需要 <a href="http://en.wikipedia.org/wiki/Polyfill" rel="noreferrer noopener nofollow">polyfill</a>它。</p>
<p>从更大的角度来看,您有两个问题需要解决。首先是网络安全模型。在 Web 安全模型中,拦截是一个有效的用例。二是违反服务器安全和密码列表。</p>
<hr/>
<p><em><strong>拦截</strong></em></p>
<p>第一个问题是由于 W3C 的理念造成的,对于 splinter 的愿景,您无能为力。 Web 安全模型的基本缺陷在 <a href="https://www.rfc-editor.org/rfc/rfc7469" rel="noreferrer noopener nofollow">Public Key Pinning with Overrides</a> 中变得非常清晰。 .覆盖适应了拦截,网络人努力淡化和掩盖这种行为。</p>
<p>您的直接防御是像您正在做的那样设置额外的安全控制。也就是说,使用加密使入侵者无法使用用户名和纯文本密码。 <a href="http://www.w3.org/TR/WebCryptoAPI/" rel="noreferrer noopener nofollow">WebCrypto</a>应该可以帮助你,所以你不需要 <a href="http://en.wikipedia.org/wiki/Polyfill" rel="noreferrer noopener nofollow">polyfill</a>它。</p>
<p>但有一个潜在的问题。拦截器可以允许加密的用户名和密码通过,然后在返回给客户端时捕获cookie或 token 。所以你也需要保护 cookie。</p>
<p>并且需要保护用户名、密码和 cookie 免受重放攻击。您不希望攻击者获取加密的用户名和密码,然后在稍后重放它以获得经过身份验证的 session 。所以听起来它也需要盐或随机数。</p>
<hr/>
<p><em><strong>数据泄露</strong></em></p>
<p>第二个问题可以通过遵循服务器端密码存储的最佳实践来解决。为此,请参阅 OWASP 的 <a href="http://www.owasp.org/index.php/Password_Storage_Cheat_Sheet" rel="noreferrer noopener nofollow">Password Storage Cheat Sheet</a>和 <a href="https://docs.google.com/document/d/1R6c9NW6wtoEoT3CS4UVmthw1a6Ex6TGSBaEqDay5U7g/edit" rel="noreferrer noopener nofollow">Secure Password Storage Threat Model</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于php - 在客户端使用 openssl_encrypt 加密用户名和密码?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/36410039/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/36410039/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: php - 在客户端使用 openssl_encrypt 加密用户名和密码?