- 締切済み
Android、iOSアプリのサーバ連携について
サーバと連携するスマートフォンアプリを作成したいと思っています。 スマートフォン側で実行した結果をサーバにアップロードすることを想定しています。 しかし、単純に実装するとクエリを解析され、スマートフォン以外からのアクセスによりサーバにデータがアップロードされてしまうと危惧しております。 秘密鍵をサーバとアプリで共有して通信しても、アプリをリバース・エンジニアリングされれば無意味と思いますし、一昔前ならIP制限してキャリアからの通信以外を制限すればよかったでしょうが、今だとテザリング等でそれも無意味かと思います。 もし何らかの良い方法があればご教授願いたく、よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
>通信傍受のようなことを心配しているわけではなく、アプリで実行した結果を改ざんしてアップロードされることを心配しています。 そういうことなら、普通はログインIDとパスワードをSSLで送り、ユーザー確認をした上で処理を受け付けるようにすると思うのですが、それだとまずいのですか? 不審な挙動があればそのIDを利用停止にすればよいわけですし、IDやパスワードをアプリとは別に登録配布すればより安全でしょう。
- corokorocoro
- ベストアンサー率29% (63/211)
だったらhttpsで通信しろよ。 もしくは独自にプロトコルを実装して暗号化すればいい。 >秘密鍵をサーバとアプリで共有して通信しても、アプリをリバース・エンジニアリングされれば無意味と思いますし 今時、秘密鍵なんてプログラムの中に埋め込むか? Access Tokenをリアルタイムに取得でしょ。
補足
ご回答ありがとうございます。 このあたりは詳しくないので誤解をして理解しているかもしれませんが、 Access Tokenを使ったところで、Access Tokenをやり取りするプログラムを作られてしまえば同じではないでしょうか? Androidですとapkを解凍してしまえばソースは見えてしまうので、なんとでもなる気がします。 通信傍受のようなことを心配しているわけではなく、アプリで実行した結果を改ざんしてアップロードされることを心配しています。 どうしようもないので全てサーバで処理してくださいというのならそれで諦めはつくのですが、何らかの方法があるのかと思いましたので質問させていただきました。
補足
例えば、何らかのゲームをスマートフォンのアプリで行なって、その結果の得点ランキングを競う場合はどうするのでしょうか? サーバ側はユーザがアップロードしてきたゲームプレイ結果の得点をユーザごとに集計し、ランキングすることになると考えています。 (ガラケーでのモバゲーなどの簡単なフラッシュゲームはそのような仕組みではないかと思っているのですが) この場合、結果送信の際のクエリを解析してしまえば、認証後は得点を改ざんして送信することが可能であると思います。 暗号化すれば、クエリ単体では解析できないでしょうが、リバースエンジニアリングすればサーバに送るクエリやらプロトコルはわかってしまうのではないでしょうか。 フラッシュがどれくらいリバースエンジニアリングしやすいのかは知りませんが、Androidなら簡単です。 それでもガラケーの場合はIPをキャリアで制限するなどすれば、ある程度はデータの正当性を確保できるのではないかと思っていました。 TCPで常時サーバとやり取りをしているとかだと、まだやりようはあるのかもしれませんが、そこまで頑強なサーバを用意することはできません。 TCPでもシミュレータを作れば同じ話のような気はしますが、そこまでする人にはどうしようもない(対策しようがない)とも思います。 しかし、現状のAndroidだと余りにも簡単に改ざんできる気がするので、どうしたものかと考えている次第です。