こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

Android、iOSアプリのサーバ連携について

サーバと連携するスマートフォンアプリを作成したいと思っています。
スマートフォン側で実行した結果をサーバにアップロードすることを想定しています。
しかし、単純に実装するとクエリを解析され、スマートフォン以外からのアクセスによりサーバにデータがアップロードされてしまうと危惧しております。

秘密鍵をサーバとアプリで共有して通信しても、アプリをリバース・エンジニアリングされれば無意味と思いますし、一昔前ならIP制限してキャリアからの通信以外を制限すればよかったでしょうが、今だとテザリング等でそれも無意味かと思います。

もし何らかの良い方法があればご教授願いたく、よろしくお願い致します。

投稿日時 - 2012-11-20 10:44:05

QNo.7806770

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

>通信傍受のようなことを心配しているわけではなく、アプリで実行した結果を改ざんしてアップロードされることを心配しています。

そういうことなら、普通はログインIDとパスワードをSSLで送り、ユーザー確認をした上で処理を受け付けるようにすると思うのですが、それだとまずいのですか? 不審な挙動があればそのIDを利用停止にすればよいわけですし、IDやパスワードをアプリとは別に登録配布すればより安全でしょう。

投稿日時 - 2012-11-20 18:14:55

補足

例えば、何らかのゲームをスマートフォンのアプリで行なって、その結果の得点ランキングを競う場合はどうするのでしょうか?
サーバ側はユーザがアップロードしてきたゲームプレイ結果の得点をユーザごとに集計し、ランキングすることになると考えています。
(ガラケーでのモバゲーなどの簡単なフラッシュゲームはそのような仕組みではないかと思っているのですが)

この場合、結果送信の際のクエリを解析してしまえば、認証後は得点を改ざんして送信することが可能であると思います。
暗号化すれば、クエリ単体では解析できないでしょうが、リバースエンジニアリングすればサーバに送るクエリやらプロトコルはわかってしまうのではないでしょうか。
フラッシュがどれくらいリバースエンジニアリングしやすいのかは知りませんが、Androidなら簡単です。
それでもガラケーの場合はIPをキャリアで制限するなどすれば、ある程度はデータの正当性を確保できるのではないかと思っていました。

TCPで常時サーバとやり取りをしているとかだと、まだやりようはあるのかもしれませんが、そこまで頑強なサーバを用意することはできません。
TCPでもシミュレータを作れば同じ話のような気はしますが、そこまでする人にはどうしようもない(対策しようがない)とも思います。

しかし、現状のAndroidだと余りにも簡単に改ざんできる気がするので、どうしたものかと考えている次第です。

投稿日時 - 2012-11-20 19:17:53

ANo.1

だったらhttpsで通信しろよ。
もしくは独自にプロトコルを実装して暗号化すればいい。

>秘密鍵をサーバとアプリで共有して通信しても、アプリをリバース・エンジニアリングされれば無意味と思いますし
今時、秘密鍵なんてプログラムの中に埋め込むか?
Access Tokenをリアルタイムに取得でしょ。

投稿日時 - 2012-11-20 12:34:35

補足

ご回答ありがとうございます。

このあたりは詳しくないので誤解をして理解しているかもしれませんが、
Access Tokenを使ったところで、Access Tokenをやり取りするプログラムを作られてしまえば同じではないでしょうか?
Androidですとapkを解凍してしまえばソースは見えてしまうので、なんとでもなる気がします。

通信傍受のようなことを心配しているわけではなく、アプリで実行した結果を改ざんしてアップロードされることを心配しています。
どうしようもないので全てサーバで処理してくださいというのならそれで諦めはつくのですが、何らかの方法があるのかと思いましたので質問させていただきました。

投稿日時 - 2012-11-20 16:54:14

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-