私たちはjQuery MobileとPhonegapを使って2つの店舗に表示されるiOSアプリとAndroidアプリです。アプリケーションは、Javascriptと典型的なajax / JSONP呼び出しを使用してリモートサーバーからデータを取得します。
私たちは、何らかの形でバックエンドでのアプリケーションです。通常は、特定のドメインからのリモートAPIへのアクセスを制限することができます。ファイルはローカルに保存され、file://プロトコルを使用するため、これを行うことはできません。同じ起源を避けるためにJSONPを使用するのはなぜですか?ポリシーの問題。
私たちは認証文字列を生成しようとしていましたパスフレーズ+タイムスタンプ+ deviceIDを使用して暗号化し、同じサーバー側で処理します。私たちは、すぐに人々が私たちのjavascriptファイルに簡単にアクセスでき、JavaScriptの難読化はこれまでに読んだことから100%安全ではないことに気付きました。
アプリへのAPIアクセスを制限する方法に関するアイデアか、APIを公正にオープンにしておくことができるかどうか?
ありがとうございました。
回答:
回答№1は1Phonegapは専用のアプリプロジェクトとして配布されています。これにより、コンパイルして安全な新しいAPI関数を追加して修正することができます。
apiの新しい関数は、指定されたシードからハッシュを計算して返します。 次に、サーバー側で同じコードが必要です。
ネイティブのアプリコードに慎重に埋め込まれた種と塩のハッシュで十分でしょう。
バイナリは、人々が塩を発見するのを防ぐために十分に難読化することができます。たとえば、あなたが使用できる複雑な問題があります。種として決定される長い文字列の一部として塩を選択してください。
回答№2の場合は0
JavaScriptの難読化は 0%安全;それは抑止力であり、真の解決策ではありません。 あなたはリバーサを介して任意の縮小/ obsfucated JavaScriptを実行し、完全なコードを取得することができます。また、誰も手間をかけずにPhoneGap APIのデバイス情報への応答を偽ることができるので、これを避ける唯一の確実な方法は、アプリケーションコンテナ内の証明書を使用してアプリ内から初期のハンドシェイクを伝えることです。 iPhoneとAndroidの両方のアプローチは詳細によって異なりますが、これが問題の唯一の真の解決策です。ソースIPを見て、モバイルプロバイダーからのものであることを確認するなどの他のアプローチを使用することもできますが、それは動くターゲットです。
回答№3の場合は0
私はそれが「ハイブリッドアプリのキャッチ22」のようなものだと思う。 おそらく最善の策は、ネイティブコードによって生成されたトークンを使用することです。ネイティブコードでカスタム機能を作成してJSに渡す方法を示すチュートリアルがあります。