显然我不是 android 或 java 专家。我想在我的 Android 应用程序中做的是从服务器加载数据。我已经开始工作这部分并附上源代码。但我想以一种安全的方式来做。作为第一步,我不想使用 http://thisismyurl.com/a.php?action=get
而是像这样使用用户名/密码:http://username: password@thisismyurl.com/a.php?action=get
我该怎么做?我应该只将用户名和密码部分添加到网址吗?
假设我已经完成了这没有任何用处,因为有人可以打开 apk 并反编译源代码并获取 url 和用户名/密码。那么有没有一种真正安全的方式来做到这一点?
我希望我在这里得到理解。
String url = "http://thisismyurl.com/a.php?action=get";
String result = Web.executeWeb(url);
public class Web {
public static String executeWeb(final String url) {
final StringBuilder sb = new StringBuilder();
Thread thread = new Thread(new Runnable() {
public void run()
{
try
{
InputStream is = (InputStream) new URL(url).getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String result, line = reader.readLine();
result = line;
while((line=reader.readLine())!=null){
result+=line;
}
sb.append(result);
//System.out.println(result);
//Log.i("My Response :: ", result);
} catch (Exception e)
{
// TODO: handle exception
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
}
最佳答案
首先,您应该首先考虑您想要实现什么以及如何,然后再决定您需要什么。
首先,您必须清楚恶意用户会尝试破解您的应用,如果您的应用存储财务、个人或其他类型的敏感数据,持久性将呈指数级增长。
话虽这么说,但有几点需要考虑:
将键硬编码到您的代码中是一个坏的想法。如果您这样做,黑客破解您使用的 key 只是时间问题。
在 URL 中硬编码键是一个更糟糕的主意。请记住,您的 URL 在到达终点(您的服务器)之前会经过很多地方,同时任何有权查看该流量的人都会看到您的凭据,甚至在您不费力的情况下以未加密的方式发送它们。
根据您将如何生成 key ,我建议使用对称或非对称加密:
如果您计划为所有客户端存储一个唯一的密码(顺便说一句,这也是一个坏主意,因为如果恶意用户破解了您的 key ,他们可能拥有所有 您客户的信息),您可以使用 AES 等对称加密方法。您只需加密您的消息,通过
HTTP POST
(例如)发送它们并在另一端解密。非常简单的概念。如果您计划为您的每个客户端生成一个 key ,您就会遇到额外的障碍,您需要以某种方式让您的服务器知道您生成的 key ,或者您的客户端知道为客户端生成了哪个 key (取决于你如何面对它)。在这种情况下,您可以使用下一个点方法(这基本上是我从所有这些方法中推荐的方法)。
您可以简单地使用非对称 加密方法。这意味着服务器生成一对 key ,一个公钥,一个私钥。用户(客户端)将有一个公共(public)的加密消息并将它们发送到服务器。您可能想知道:我如何保护我的消息,以便除了我的服务器之外没有人可以解密它们?这就是私钥加入的地方,如果你有私钥,你就可以解密消息。这就是为什么你不想与任何人分享它(这就是它的名字的来源)。这样,您的客户可以随时拥有您的公钥而无需任何混淆,然后您可以使用它来加密一些文本并发送。服务器将使用其私钥解密消息并进行相应处理。
最后一种方法的优点是:
您不必担心如何让您的 key 安全地到达对方,因为它会被加密,只有服务器能够解密。
您不需要为每个客户端生成 key 。
如果您选择了一个很好的非对称算法,例如 SSL/TLS,您就不必担心它会被破解(或者至少,不会像您选择了一些其他方法)。
替换旧 key 对非常简单,只需生成一对新 key 、替换旧私钥并让您的客户拥有新公钥即可。
您可能想看看这些链接:
关于java - Android 应用程序以安全的方式从服务器检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22596895/