【发布时间】:2016-01-30 16:24:47
【问题描述】:
首先我很抱歉我的英语不好。
我目前正在开发 android 应用程序,该应用程序需要用户从 Web 服务器上的现有数据库登录,并且该应用程序运行顺利,但是当我尝试使用 Google Play 的数据包捕获应用程序跟踪通过我的应用程序发送的数据包时,密码数据我的应用程序发送的是纯文本(未加密)。我尝试使用 base64 编码来加密密码,但 base64 非常常见且易于解码,我的问题是:
1. 是否有另一种方法来保护(加密)从 android 应用程序发送到 Web 服务器上的 PHP 的数据(用户名、密码等)?
2.在使用抓包应用时,看到另外一个知名应用如Facebook、BBM等在抓包应用上显示“No Data”,怎么办?
注意: 数据包捕获链接在这里: 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"}
注意:对不起,我将我的真实密码更改为“mypassword”,将我的真实 imei 更改为“01234567890123456”以保护隐私。
Here is Packet Capture look like,我的应用程序名称是 TSMobile Semarang,这表明我的应用程序发送了 778B 数据,但其他应用程序(如 facebook、小米和任何 google 应用程序)显示“无数据”。
This 是我在 Packet Capture APP 中单击带有“No Data”和 SSL 符号的 Facebook 应用程序时的样子。看起来facebook加密了他们的数据,怎么做?
【问题讨论】:
标签: android post encryption