我正在使用 cordova 构建一个 Android 应用程序。该应用程序的用户将能够通过该应用程序登录远程服务器并接收用户信息。用户将拥有一个钱包,他们可以从此应用程序购买数字产品。
首先,应用程序从用户接收电子邮件地址和密码并将其发送到远程服务器进行身份验证。这是一个示例:
var did = device.uuid;
if(did!=''){
$.get("http://SERVER.ORG/Login.php?email="+email+"&pass="+pass+"&did="+did, getData);
}else{
alert("Sorry! can't read your deice. Please close the app & restart.");
window.location.href = "index.html";
}
function getData(data) {
var response = jQuery.parseJSON(data);
localStorage.status = response.status;
localStorage.usr_pin = response.usr_pin;
if(localStorage.status==0){
alert("Invalid Credentials");
}else{
localStorage.user_id = response.client_id;
localStorage.user_name = response.client_name;
localStorage.user_phone = response.client_phone;
localStorage.user_balance = response.available_credit;
}
}
* 我需要确保没有人可以在没有应用程序的情况下直接访问我的登录网址。 目前我正在检查请求是否包含设备ID。并阻止尝试失败次数超过 5 次的设备 ID。
* 其次,我需要确保我的登录网址对用户隐藏。 目前,我的登录功能位于我的服务器上托管的另一个 .JS 文件中。但 apk 可以很容易地反编译,并且 html 文件告诉我的 .JS 文件的位置,可以轻松下载该文件并使用多个在线解密器进行解密。
我进行了大量搜索并找到了一些安全提示,但由于缺乏知识而未能正确获取它们。请建议我如何向逆向工程师隐藏我的源代码。如果不可能,那么如何保护我的代码,以便没有人可以使用它。
最佳答案
一个巨大的问题是您使用 http 将登录凭据发送到服务器。任何在网络上捕获数据包的人都可以获取用户的登录信息和帐户数据。始终始终始终使用 https。至于防止来自不使用应用程序的客户端的请求,您可以考虑向只有应用程序才能正确生成的请求负载中添加某种加密签名标签。我不确定在这里建议一个特定的方案是否合适,但希望一些更精通安全性的堆栈溢出用户可以提供一些建议。对于你的最后一个问题,隐藏你的登录网址将是一个失败的原因,但如果你的服务器上有一些正在处理登录验证的 .js 文件,并且你不希望对手能够检查它,那就这样做吧禁止。如果您在客户端进行任何登录验证,那么您就做错了。
关于javascript - 如何提高 Cordova 应用程序的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35520572/