1

我有一个 RESTFull 服务器和一个 Android 客户端。服务器有一些方法可以将数据返回给客户端的 HTTP 调用。客户端代码中的一种方法是我用来验证客户的下面所示的方法。

        HttpClient httpclient = new DefaultHttpClient();
        HttpGet request = new HttpGet(
                "http://localhost:8080/myapp/customer/login/cUser/cpwd");

        request.addHeader("Accept", "text/plain");
        HttpResponse response = httpclient.execute(request);
        HttpEntity entity = response.getEntity();
        InputStream instream = entity.getContent();
        String msg = read(instream);


 if(msg.equals("success"){ // if customer logged in successfully
     //do something
 }

服务器端代码使用上述 uri 的一部分作为用户名和密码并进行身份验证。在我看来,某人很容易访问这些数据并以他/她喜欢的方式使用它。有没有更好的方法来做到这一点?

提前致谢

4

2 回答 2

1

是的,攻击者很容易从普通 HTTP 请求中使用的 URL 中提取用户名/密码。您的计划完全容易受到利用和攻击。

请改用HTTPS。这将强制传输连接进行 SSL 加密并防止窥探。您还应该从 URL 中删除凭据,而改用Basic Authentication之类的东西。

于 2012-05-25T15:08:14.197 回答
0

在 RESTfull 服务中,您必须使用 HTTP/1.1 auth 标头,例如:

request.addHeader("Authorization", "auth string");

身份验证字符串可以是基本身份验证字符串:base64_encode(login+":"+password)或 OAuth2 身份验证令牌等。

PS Ou bien 使用 SSL 连接,正如 Brian Kelly 所说。

于 2012-05-25T15:08:23.373 回答