セキュリティ ガイド
コルドバのアプリケーションを開発するときに考慮する必要がありますいくつかのセキュリティのベスト プラクティスについて説明します。 セキュリティは非常に複雑なトピック、従ってこのガイドは完全ではないことを留意してください。 このガイドに貢献することができる場合は、お気軽「ドキュメント」の下でコルドバのバグ追跡システム問題を報告します。 このガイドは、一般的なコルドバ開発 (全プラットフォーム) に該当するように設計されますが、特別なプラットフォーム固有の注意事項が記載されます。
このガイドには、次のトピックについて説明します。
- ホワイト リスト
- Iframe およびコールバック Id メカニズム
- 証明書を固定
- 自己署名証明書
- 暗号化されたストレージ
- 一般的なヒント
- お勧めの記事やその他のリソース
ホワイト リスト
読み取りし、ホワイト リスト ガイドを理解します。
Android の API 10 と以下は、ホワイト リスト登録のドメインは動作しませんし、iframe の WP8 XMLHttpRequest。 つまり、攻撃者が iframe 内の任意のドメインに読み込むことができ、iframe 内のページのスクリプトも一切コルドバの JavaScript オブジェクトと対応するネイティブ Java オブジェクトに直接アクセスできます。 これらのプラットフォーム用のアプリケーションを構築する際、これを考慮に入れなければなりません。 実際にはつまり、ターゲット 10 より高い Android の API と、可能であればを使用しない iframe を読み込む外部コンテンツ - inAppBrowser プラグインや他のサードパーティ製プラグインを使用してください。
Iframe およびコールバック Id メカニズム
ホワイト リストに登録ドメインから iframe のコンテンツを提供しています、そのドメイン ネイティブ コルドバ ブリッジにお越し。 これはつまり、サードパーティの広告ネットワークをホワイト リストしこれら広告 iframe を通じて、悪意のある広告が iframe を打破し、悪意のある操作を実行することができること可能です。 このため、一般に使用しないでください iframe iframe コンテンツをホストしているサーバーをコントロールしていないかぎり。 サード パーティのプラグインの広告ネットワークをサポートするために利用できるがあることに注意してください。 この文が true の iOS は、iframe の接続を含むすべてを横取りしないことに注意してください。
証明書を固定
コルドバは固定する真の証明書をサポートしません。 これに対する主要な障壁は Android にネイティブ Api の欠如 SSL サーバーの証明書のチェックを実行する接続を遮断します。 (JSSE を使用して Java で Android 上の固定を行う証明書することは、Android 上 webview は C++ で書かれてサーバー接続はあなたのため、webview によって処理されますが、だから不可能だが Java と JSSE を使用する。)Apache コルドバは複数のプラットフォーム間で一貫性のある Api を提供するものです、のでその一貫性が切れます主要なプラットフォームの機能を持っていません。
証明書を固定、またはアプリケーションの有効期間中に他の様々 な回でサーバーの公開キー (指紋) 予期される値が、アプリケーションの起動時のチェックなどを近似する方法があります。 サード パーティのプラグインを行うことができますコルドバがあります。 ただし、これは自動的に検証するサーバーへの接続ごとに予期される値の固定 true 証明書と同じです。
自己署名証明書
サーバーに自己署名証明書を使用することをお勧めします。 SSL を希望する場合、サーバーが既知の CA (証明機関) によって正しく署名されている証明書であることそれ勧め。 真の証明書を固定することができないことこれが重要になります。
自己署名証明書を受け入れるサーバー証明書がデバイスによって有効と見なされることができます証明書チェーンの検証をバイパスするからです。 これは、中間者攻撃への通信を開きます。 ハッカーを傍受し、デバイスとサーバー間の通信を読むだけでなくだけでなく、コミュニケーションを変更する非常に簡単になります。 デバイスは、サーバーの証明書が信頼された CA によって署名されていることを確認しないのでこれが起こっているか決して知らない。 デバイスには、サーバーはそれを予期している証拠がありません。 中間者攻撃を行うための使いやすさのため自己署名入りの証明書の受け入れがだけ、信頼されていないネットワーク上の https ではなく http を実行するよりも同然。 はい、トラフィックは暗号化されますが、しかし、真ん中の男は、暗号化は受動オブザーバーを除いて役に立たないので、すべてをアクセスできるように、- で-仲介者からのキーで暗号化できます。 ユーザーに SSL をセキュリティで保護された、信頼し、これが意図的を作ることそれ安全でない、SSL 使用は誤解を招くになります。 これが、信頼されたネットワークで使用される場合 (すなわち、あなたが制御された企業の完全に内側)、[自己署名入りの証明書はまだお勧めしません。 信頼されたネットワークで 2 つの提言は、ネットワーク自体が信頼できる、ちょうど http を使用するか (自己署名されていない) 信頼される CA によって署名された証明書を取得します。 ネットワークが信頼されているかはありません。
ここで説明した原則は Apache コルドバに限定されない、すべてのクライアント サーバー間の通信に適用されます。
Android でコルドバを実行する場合を使用して android:debuggable="true"
、アプリケーション マニフェストによって許可されます証明書などの SSL エラー チェーン検証エラー自己署名入りの証明書に。 この構成では自己署名入りの証明書を使用できますが、アプリケーションが運用環境で使用する構成ではありません。 アプリケーションの開発時にのみ使用するものです。
暗号化されたストレージ
(未定)
一般的なヒント
Android のジンジャーブレッドを使用しないでください !
- 10 以上 min ターゲット sdk レベルを設定します。API 10 ジンジャーブレッド, あり、ジンジャーブレッドは、もはや Google またはデバイスの製造元によってサポートされているし、お勧めしたがってできません Cordova チームによって。
- ジンジャーブレッドは、安全でないことを示されているし、1 つは、最もターゲット モバイル Os http://www.mobilemag.com/2012/11/06/andriod-2-3-gingerbread-security/.
- ジンジャーブレッドまたは低い Android 上のホワイト リストは動作しません。 つまり、攻撃者は悪意のあるコード コルドバ Api のすべてにアクセスする必要がありますし、そのアクセスを使用して個人データを盗む、プレミアム レート番号に SMS メッセージを送信およびその他の悪意のある行為を実行するでしたする iframe を読み込むことができます。
InAppBrowser 外部リンクを使用します。
- InAppBrowser は、外部のウェブサイトへのリンクを開くときに使用します。 これは、ホワイト リスト登録のドメイン名と、InAppBrowser ネイティブ ブラウザーのセキュリティ機能を使用して、web サイトを与えることはありませんので、あなたのアプリケーション内で直接内容を含むコルドバ環境へのアクセスよりはるかに安全です。 サード パーティの web サイトを信頼、アプリケーションに直接組み込む場合でもその第三者の web サイトは悪意のある web コンテンツをリンクでした。
すべてのユーザー入力を検証します。
- 常にあなたのアプリケーションを受け入れるすべての入力を検証します。 これには、ユーザー名、パスワード、日付、アップロードされたメディアなどが含まれます。 攻撃者は HTML と JS 資産 (アプリケーションを逆コンパイル、または chrome://inspect のようなデバッグ ツールを使用するか) 操作可能性があります、ためこの検証データ任意のバックエンド サービスに渡す前に、特にまた、サーバー上実行必要があります。
- 他のソースのデータを検証する必要があります: ユーザー ドキュメント、連絡先、プッシュ通知
機密性の高いデータをキャッシュしません。
- ユーザー名、パスワード、地理位置情報などの機密データをキャッシュする場合それが潜在的取得後、未承認のユーザーやアプリケーションによって。
あなたが何をやっている知っている限り、eval() を使用しないでください。
- JavaScript 関数 eval() 虐待されての長い歴史を持ちます。正しくを使用、コードのデバッグの難しさ、およびコード実行の速度が低下、インジェクション攻撃のために開くことができます。
ソース コードが安全であるとは限りません
- コルドバのアプリケーションは、ネイティブなコンテナーにパッケージ化された HTML と JavaScript の資産から組み込まれて、あなたのコードが安全であることを考えないでください。 リバース エンジニア リング、コルドバ アプリケーションに可能です。