gpt4 book ai didi

java - 使用 JSON 安全地将数据从 Java 传递到 PHP 以及从 PHP 传递到 Java 的最佳实践

转载 作者:行者123 更新时间:2023-11-29 08:53:39 24 4
gpt4 key购买 nike

我一直在开发一个 Android 应用程序项目,该项目使用 HTTP Get 通过使用来自 Java 的 JSON 的 PHP 文件从 MySQL 发送和接收数据。

我最近在使用 HTTP 传输和通过 URL 传递参数的最佳实践背后遇到了一些理论上的问题。

第一个问题:

我应该如何将我的数据传递到我的 PHP Web 服务?

目前我只是使用键值对通过单个参数传递数据,如下所示:

myurl.com/retrieveinfo.php?user_id=453&password=sha1-hash-value

我是否应该将这种类型的请求改为将 JSON 对象附加到 URL 上?像这样:

myurl.com/retrieveinfo.php?{\"users\":{\"username\":\"User1Name\",\"user_id\":453 ,\"password\":\"sha1-哈希值\"}}

第二个问题:

*我应该如何处理来自服务器的 JSON 响应?我是否需要将这项工作推给处理程序并确保 UI 线程不是执行这项工作的人? *

目前我只是为每个对象类型使用单独的方法解析 JSON,例如

用户类

 private void parseUserInfo(JSONObject response){
// Do all my Parsing for a User Object

try{
JSONArray users = response.getJSONArray("users");
JSONObject user = users.getJSONObject(0);

// Get the User info etc...

}catch(JSONException ex){
ex.printStackTrace();
}

}

笔记类

 private void parseNotes(JSONObject response){
// Do all my Parsing for a Note Object

try{
JSONArray notes = response.getJSONArray("notes");

for (int index = 0; index < notes.length() ; index++)
{
JSONObject note = notes.getJSONObject(index);

// Get all the note info etc...

}

}catch(JSONException ex){
ex.printStackTrace();
}

}

第三个问题:

我希望我的 PHP 服务器文件仅适用于我的应用程序。那么,什么是保护我的服务器上的 PHP 文件的最佳方式,这样如果它在浏览器中运行,对我的文件的请求就不会通过?

我应该发送一些只有我的应用程序知道的临时 key 吗?

谢谢

最佳答案

第一个问题:

您真的不想将 JSON 对象作为查询参数放在 url 上。我看到的真正的两个争论是您要么 1) 使用您正在使用的键值对,要么 2) 将其设为 POST 并将 JSON 作为有效负载发送。由于您不打算向任何人公开 API,因此我认为遵循标准术语对您来说并不重要。做任何你想做的事。但是,从 REST 的角度来看,任何检索信息的操作都应该是 GET 调用,并且数据应该是查询字符串中的键值对。但是,看起来您正在传递用户名和密码(好的,密码的 sha)。始终将用户信息作为有效负载传递被认为是最佳实践。所以几乎所有的登录类型协议(protocol)都使用 POST 来获取用户数据。用户 ID 或 session ID 在查询字符串中很常见,但用户名和密码应该几乎总是在有效负载中。注意:有时在 TLS (SSL) 中,将这些内容包含在查询字符串中被认为是可以的。

第二个问题:

老实说,我只会使用 Jackson。 https://github.com/FasterXML/jackson但除此之外,有一个单独的解析层是正常的。换句话说,一个类处理所有的解析。如果可以避免,您不想将此代码放入模型中。新层将处理解析并将 Java 模型对象向下传递到下一层。

第三个问题:

最简单的方法就是检查请求中的用户代理 header 。确保用户代理是您的应用程序,而不是浏览器。但是,人们仍然有可能“欺骗”它。使用临时 key 也无济于事,因为一旦人们嗅探到流量,他们就可以找出临时 key 。这里的标准做法是执行某种类型的基于 session 的 key ,其中应用程序发送某种类型的 MAC 以证明它是一个有效的客户端。您还可以考虑使用 OAUTH2 来保护您的 API。

关于java - 使用 JSON 安全地将数据从 Java 传递到 PHP 以及从 PHP 传递到 Java 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21436891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com