2

我已经向亚马逊提交了一个应用程序以供批准,他们回复了这个:

“这个应用程序似乎正在发送未加密的敏感信息。在这种情况下,电子邮件和密码是以明文形式发送的。请更新应用程序以加密所有敏感信息。”

在服务器端,我使用 sha1() PHP 方法(非常标准)加密数据库中的密码。我假设他们希望在传输到 Web 服务时对 Java 传递的密码/电子邮件字符串进行加密。我假设?如果是这种情况,我需要解密数据(特别是电子邮件,因为这需要以纯文本形式存储在我的数据库中。

有人看过这个亚马逊查询吗?我对它的解释是否正确?如果是这样,Java有没有办法在传输过程中临时加密数据?

这是我如何做的一个示例:

insertParam = new ArrayList<NameValuePair>();
            insertParam.add(new BasicNameValuePair("Email", Email));
            insertParam.add(new BasicNameValuePair("Password", Password));
            insertParam.add(new BasicNameValuePair("Username", Username));

            try {
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url_select);

                httpPost.setEntity(new UrlEncodedFormEntity(insertParam));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                is = httpEntity.getContent();

            }

编辑:

看起来HTTPS是要走的路。

4

1 回答 1

3

Amazon 的要求似乎有些保守,但最好通过 HTTPS 而不是未加密的 HTTP 连接到您的 Web 服务来满足。这正是另一个 StackOverflow 用户最后所做的:亚马逊 AppStore 提交失败:“密码等敏感信息以明文形式回显,无需加密”

虽然您可以加密应用程序中的数据,通过 Internet 发送数据,然后使用共享密钥在您的服务器上对其进行解密,但这很容易受到反编译您的应用程序以获取密钥的攻击者的攻击。

或者,您可以生成一个密钥对,在应用程序中包含公钥并用它加密数据,通过互联网发送,然后使用服务器上的私钥解密传入的数据,但您基本上只是重新- 手动实现 HTTPS。

归根结底,实现亚马逊要求的“正确”方式是使用 HTTPS。其他任何事情都可能难以安全地实施。

于 2013-01-02T18:51:06.963 回答