首先,我很抱歉我的英语不好。
我目前正在开发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加密了他们的数据,怎么做?
答案 0 :(得分:1)
只要您使用HTTPS而不是普通HTTP,您的数据就已经加密了。
你提到的应用程序在中间攻击中执行一个人,如果你安装这个应用程序,你是在说它应该解密你的数据。如果您的TLS客户端以接受连接的方式进行配置,那么您几乎无能为力。
我也怀疑facebook使用额外的加密,我的猜测是它只是gziped或其他编码内容。
当然你可以端到端地加密所有东西,但是你必须向我们展示你已经尝试过的东西,向我们展示代码。