我有一个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的一部分作为用户名和密码并进行身份验证。在我看来,有人可以很容易地访问这些数据并按照他/她的喜好使用它们。有没有更好的方法呢?
提前致谢
答案 0 :(得分:1)
是的,攻击者从普通HTTP请求中使用的URL中提取用户名/密码非常容易。你的计划完全容易受到攻击和攻击。
请改用HTTPS。这将强制传输连接进行SSL加密并防止窥探。您还应该从网址中删除凭据,而是使用Basic Authentication之类的内容。
答案 1 :(得分:0)
在RESTfull服务中,您必须使用HTTP / 1.1 auth标头,例如:
request.addHeader("Authorization", "auth string");
Auth字符串可以是基本的身份验证字符串:base64_encode(login+":"+password)
或OAuth2身份验证令牌等。
P.S。正如Brian Kelly所说,Ou bien使用SSL连接。