1

私はRESTFullサーバーとそのためのAndroidクライアントを持っています。サーバーには、クライアントのHTTP呼び出しにデータを返すメソッドがいくつかあります。クライアントコードのメソッドの1つは、顧客を認証するために使用した以下のメソッドです。

        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 認証ヘッダーを使用する必要があります。次に例を示します。

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

認証文字列は、基本認証文字列base64_encode(login+":"+password)または OAuth2 認証トークンなどにすることができます。

PS Ou bien は、Brian Kelly が言ったように、SSL 接続を使用します。

于 2012-05-25T15:08:23.373 に答える