【问题标题】:What's the best way to ensure privacy during communication between Cordova based mobile app and web server?在基于 Cordova 的移动应用程序和 Web 服务器之间进行通信时,确保隐私的最佳方式是什么?
【发布时间】:2014-09-09 20:12:57
【问题描述】:

我已经构建了一个基于 Cordova 的移动应用程序,适用于 iOS 和 Android,我需要在应用程序和服务器之间进行安全通信。对服务器的请求,在 javascript 中是这样的:

    request.open("GET", 'http://url/service?firstElement='+elem+'&secondElement='+elem2, false);

我尝试使用 pidCrypt 库在本地使用 RSA 加密生成公钥和私钥,生成 2048 位密钥需要很长时间才能生成,所以我使用了 512 位。 服务器无法解密消息。

我正在寻找更好的解决方案。

【问题讨论】:

  • 简单的解决方案是使用https (SSL)。 RSA 加密通常用于加密密钥,而不是数据。对于加密数据,当前的最佳做法是 AES。

标签: android ios cordova encryption get


【解决方案1】:

尝试使用发送 Ajax 请求,像这样。我假设您将 php 用于动态代码(服务器端)。

这里是您的 cordova, phonegap 目录中的 HTML 文件示例。

    <form method = "post" action = "#!">
        <div class="col-md-4">
            <span class="help-block">Name</span><input type="text" name="username" class="form-control" />
        </div>
        <br>
        <div class="col-md-4">
            <span class="help-block">Password</span><input type="text" name="password" class="form-control" />
        </div>
        <input type = "submit" value = "Save" class = "btn btn-success right" onClick="UpdateRecord();"/>
    </form>

    <script>
    function UpdateRecord()
      {
          var name = $("[name='username']").val();
          var host = $("[name='password']").val();
          jQuery.ajax({
           type: "POST",
           url: "php/login.php",
           /* Or */
           /*url: "https://www.yoursite.com/page",*/
           data: "username="+ username+"& password="+ password,
           dataType: "html",
           cache: false,
           success: function(response){
                if(response == 'true') {
                    $.session.set("myVar", username);
                    window.location.href='profile.html';
                }
                else {
                    $("#errorMessage").html("Invalid Entry, Please Try Again");
                }   
            }
         });
     }
    </script>

以及用于句柄查询的 PHP 文件。

请注意,代码未经测试,可能会根据您的需要进行更改。您可以在此处执行任何加密方法并使用任何功能。

    <?php
        include 'config.php';
        $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string($_POST['password']);

        if(!empty($username) && !empty($password))
        {
                //$result = mysql_query("SELECT * FROM ".$db.".users WHERE username='$username' and  password ='$password'");
                $result=mysql_query("select * from ".$db.".users WHERE email = '$username' ");
                while($data = mysql_fetch_row($result))
                {
                    $original_password = $data[3];
                    $salt = $data[4];
                    $hashedPass = sha1($salt.$password);
                    $fullusername = $data[16]." ".$data[17]; // Used Only for create full name session
                    if ($original_password == $hashedPass)
                    {
                        $_SESSION['username'] = $fullusername;
                        $_SESSION['useremail'] = $username;
                        $_SESSION['UserID'] = $data[0];
                        echo 'true';
                    }
                }

            }
    ?>

编辑

request.open("GET", 'http://url/service?firstElement='+elem+'&secondElement='+elem2, false);

在发送敏感数据时避免使用 GET 方法。

编辑,有用的链接

Local storage protection in phonegap application

【讨论】:

  • 仅以 POST 的形式发送数据并不能提供安全性,它只会让它稍微难以查看。
  • @Zaph 是的,我知道,但我认为这是将数据发布到 php 页面然后使用所需方法对其进行加密后的唯一方法。如果您知道如何加密 HTML 中的数据,请发布。它帮助了很多人。而且我认为我们使用 jquery 来加密数据并将其发送到 php。方法对吗?
  • 正如我所评论的,简单的解决方案是使用https (SSL)。
  • @Zaph ,是的,在我的代码中,我在 Or 的评论中提到了它。是这样吗?
猜你喜欢
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多