从Packet Capture APP将Android POST数据保护到Web Server API

时间:2016-01-30 16:24:48

标签: android post encryption

首先,我很抱歉我的英语不好。 我目前正在开发Android应用程序,需要用户从Web服务器上的现有数据库登录,并且应用程序运行正常,但当我尝试使用Google Play中的Packet Capture App跟踪通过我的应用程序发送的数据包时,我的应用程序发送的密码数据是纯文本(未加密)。我尝试使用base64编码来加密密码,但base64很常见且易于解码,我的问题是:
1.有没有另一种方法来保护(加密)从Android应用程序发送到Web服务器上的PHP的数据(用户名,密码等)?
2.当使用Packet Capture应用程序时,我看到另外一些着名的应用程序,如Facebook,BBM等显示" No Data"在数据包捕获应用程序上,我该怎么做?

NB: Packet Capture链接在这里: play.google.com/store/apps/details?id=app.greyshirts.sslcapture

这是登录类中的doInBackground:

    @Override
    protected String doInBackground(String... arg0) {
    String url = "http://mydomainhost.com/login.php?" +
                 "username="+ username.getText().toString() +
                 "&password="+ password.getText().toString() + "&imei=" + imei;
        JSONParser jParser = new JSONParser();

        JSONObject json = jParser.getJSONFromUrl(url);
        try {
            success = json.getString("sukses");
            pesan = json.getString("pesan");

            Log.e("error", "nilai sukses=" + success);

            JSONArray hasil = json.getJSONArray("login");

            if (success.equals("1")) {

                for (int i = 0; i < hasil.length(); i++) {

                    JSONObject c = hasil.getJSONObject(i);

                    String id = c.getString("id").trim();
                    String username = c.getString("username").trim();
                    String nama = c.getString("nama").trim();
                    String email = c.getString("email").trim();
                    String som_id = c.getString("som_id").trim();
                    gcm_regid = c.getString("gcm_regid").trim();
                    session.createLoginSession(id, username, nama, email, imei, som_id, gcm_regid);
                    Log.e("ok", " ambil data");

                }
            } else {
                Log.e("erro", "tidak bisa ambil data 0");
            }

        } catch (Exception e) {
            Log.e("error", "tidak bisa ambil data 1");
        }
        return null;

    }

以下是接收登录类的PHP:

$pass_acak = generateHash($password,'yr');
$username   = strtolower($username);
$sql_cek = "SELECT * FROM user WHERE username='$username' AND password='$pass_acak' LIMIT 1";
$qry_cek = mysql_query($sql_cek);
$dt=mysql_fetch_array($qry_cek);
$ada_cek = mysql_num_rows($qry_cek);
if ($ada_cek >=1) {
    if($dt['status']==0){
        $respon['sukses']=0;
        $respon['pesan']="Username ".$username." Tidak Aktif!";
    } else {
        if($imei==$dt['imei']){
            $respon['sukses']=1;
            $respon['pesan']="Login Berhasil";
            $h['id']=$dt['id'];
            $h['username']=$username;
            $h['email']=$dt['email'];
            $h['nama']=$dt['nama'];
            $h['som_id']=$dt['som_id'];
            $h['imei']=$dt['imei'];
            $h['gcm_regid']=$dt['gcm_regid'];
            $respon['login'][]=$h;
        } else {
            $respon['sukses']=0;
            $respon['pesan']="IMEI tidak cocok!";
        }
    }
} else {
    $respon['sukses']=0;
    $respon['pesan']="Username / Password Salah!";
}

注意:generateHash是我自己生成加密密码的函数

以下是我的应用程序的数据包捕获结果:

POST /login.php?username=anggazan&
password=mypassword&imei=01234567890123456 HTTP/1.1
Content-Length: 0
Host: mydomainhost.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.29
Content-Type: text/html
Content-Length: 336
Date: Sat, 30 Jan 2016 15:48:02 GMT
Accept-Ranges: bytes
Server: LiteSpeed
Connection: close

{"sukses":1,"pesan":"Login Sukses"}

注意:我很抱歉,我将真实密码更改为&#34; mypassword&#34;和我真正的imei到&#34; 01234567890123456&#34;隐私使用。

Here is Packet Capture look like,我的应用名称是TSMobile Semarang thre显示我的应用程序发送了778B数据但其他应用程序如facebook,xiaomi和任何谷歌应用程序显示&#34;无数据&#34;。

This当我点击Facebook应用时出现的情况是&#34; No Data&#34; Packet Capture APP中的SSL和SSL符号。它看起来facebook加密了他们的数据,怎么做?

1 个答案:

答案 0 :(得分:1)

只要您使用HTTPS而不是普通HTTP,您的数据就已经加密了。

你提到的应用程序在中间攻击中执行一个人,如果你安装这个应用程序,你是在说它应该解密你的数据。如果您的TLS客户端以接受连接的方式进行配置,那么您几乎无能为力。

我也怀疑facebook使用额外的加密,我的猜测是它只是gziped或其他编码内容。

当然你可以端到端地加密所有东西,但是你必须向我们展示你已经尝试过的东西,向我们展示代码。