【问题标题】:What is the best way to go about protecting a user's password going from iPhone app -> PHP -> MySQL?从 iPhone 应用程序 -> PHP -> MySQL 保护用户密码的最佳方法是什么?
【发布时间】:2011-10-13 19:34:09
【问题描述】:

我需要将以下内容发送到我的服务器以通过 POST 进行存储:

&用户名=xxxx&密码=zzzzz

我应该在发送前加密吗?或者只是通过 HTTPS (SSL) 将其发送到我的 PHP 页面?

我应该在 PHP 页面上进行加密以将其保存到 MySQL 服务器吗?

这里需要一点帮助来了解什么是最好的 iPhone 应用程序 -> PHP -> MySQL 方式来做到这一点。

【问题讨论】:

  • HTTPS/SSL 应该没问题。如果您想确定,可以验证您的证书。
  • 如果您接受之前问题的更多答案,您将获得更好的回复率,15%是相当低的......

标签: php iphone mysql objective-c xcode


【解决方案1】:

正如其他人所说,HTTPS 应该足以保护途中的数据。在服务器端,您不应该以任何可逆的形式存储密码(除非出于某种原因您需要明文,例如将其传递给第三方)。我建议使用加盐的加密哈希。

本质上,您所做的是:当用户设置密码时,您会生成一个新的随机字符串(salt),然后将密码存储为哈希(salt + 密码)的结果.这个哈希应该是一个强大的加密函数(现在我推荐 SHA-256 或类似的)。这样,即使你的服务器被攻破,也无法找回用户的明文密码。

当用户提交密码时,您可以简单地再次计算哈希(盐 + 密码)并检查结果是否与存储在数据库中的内容匹配。

【讨论】:

    【解决方案2】:

    通过 HTTPS 发送它应该可以在 iPhone 应用程序和 PHP 之间进行通信。您应该尽快使用良好的密码哈希算法对密码进行哈希处理。

    如果您不熟悉良好的密码哈希做法,您可能会发现这很有用: How do you use bcrypt for hashing passwords in PHP?

    【讨论】:

      【解决方案3】:

      如果您只是想在传输过程中保护数据,HTTPS/SSL 就足够了。显然,您可能还需要在 MySQL 数据库中存储加密值。在这种情况下,您还应该在执行 sql 查询之前加密您的凭据。

      【讨论】:

        【解决方案4】:

        您可以使用 md5() 加密密码或制作自己的加密/解密函数。

        这是一个例子

        从客户端

         $password = md5('password');
        

        检查数据库

         //security check
         $user = mysql_real_escape_string($_POST['username']);
        
         mysql_query("SELECT user_name, email FROM users WHERE username='".$user."' AND MD5(password)='".$password."'");
        

        【讨论】:

        • 拜托!这是不安全的。在您的示例中,我是否窃取了您的密码或其 md5 哈希值都没有区别。使用 HTTPS,你会没事的!
        • 此外,您忘记转义$password(转义不是安全检查,顺便说一句)。这个解决方案不行。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-19
        • 2019-10-09
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        • 2011-05-02
        相关资源
        最近更新 更多