(過去6時間使用していた)電話ギャップ/ Cordovaアプリを作成しようとしています。 Android emulator(API ver 22、Android> 4.4)を介してAjax呼び出しを行うことができません。Ajax呼び出しはFirefoxデスクトップで機能しますが失敗しますchromeブラウザでも)(エミュレータと同じ例外を除く)
cordova-バージョン5.0.0
コード:
$.ajax({
url: serverUrl,
type: 'GET',
contentType: "application/json",
async: true,
dataType: 'jsonp',
callback: 'callback',
jsonpCallback: 'yourcallback',
crossDomain: true,
success: function (result) {
$("#message").html("location sent");
},
error: function (request, error) {
alert('Error ' + error);
}
});
私が見るエラーは:
chromeリモートデバッガ:
次のコンテンツセキュリティポリシーディレクティブに違反しているため、「 http://10.0.2.2/test/getLocation.php 」への接続を拒否しました:「default-src 'self' data:gap: https://ssl.gstatic.com 'unsafe-eval' "。 「connect-src」は明示的に設定されていないため、「default-src」がフォールバックとして使用されることに注意してください。
ブログや投稿にあらゆる種類の設定が表示されていますが、使用されていません。通常の容疑者を取り除くためにここにいくつかを置く。
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
AppManifestはインターネットにアクセスできます。
<uses-permission Android:name="Android.permission.INTERNET" />
Config.xml:
<access Origin="*" /> (have tried all variation, with putting actual server name here like "http://10.0.2.2" ).
私の悪い...
XSSをブロックする次のメタタグが含まれるPhonegapサンプルHTMLテンプレートを使用していました。
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
サンプルコードにそのようなものを入れることが正しいかどうかはわかりませんが、私にとっては2日間無駄になりました。
セキュリティ上の理由から、コンテンツセキュリティポリシーを保持する必要があります。
重要なセキュリティメカニズムはSame-Originポリシーです。これにより、Origin AのドキュメントまたはスクリプトがOrigin Bのリソースと対話する方法が制限されます。これは、URL http://store.comany.com/dir/page.html が次のURLにアクセスできることを意味します:
しかし、次のことではありません。
(詳細: https://developer.mozilla.org/en-US/docs/Web/Security/Same-Origin_policy )
ただし、攻撃者は クロスサイトスクリプティング(XSS)を使用してこのポリシーをバイパスできます
XSSおよびデータインジェクション攻撃を防ぐために、コンテンツセキュリティポリシー( ここから から)を使用できます。
コンテンツセキュリティポリシー(CSP)は、クロスサイトスクリプティング(XSS)やデータインジェクション攻撃など、特定の種類の攻撃を検出して軽減するのに役立つセキュリティの追加レイヤーです。これらの攻撃は、データの盗難からサイトの改ざんやマルウェアの配布まで、すべてに使用されます。 CSPは完全に下位互換性を持つように設計されています。それをサポートしていないブラウザは、それを実装するサーバーでも動作し、逆もまた同様です。 CSPをサポートしていないブラウザーは、それを単に無視し、通常どおり機能し、デフォルトでWebコンテンツの標準の同じオリジンポリシーを使用します。サイトがCSPヘッダーを提供していない場合、ブラウザーは同様に標準の同じオリジンポリシーを使用します。
これがすでにサンプルコードに含まれているのは、実際にはいいことです。しかし、たぶん称賛されるでしょうニース=)。セキュリティを強化するために、この構成を維持する必要があります。
あなたの場合、設定を次のように変更する必要があります:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src 'self' http://10.0.2.2">
connect-srcは、(XHR、WebSockets、およびEventSourceを介して)接続できるオリジンを制限します。ここに「自分」(デバイスにあるスクリプト用)とリモートURL(例: http://10.0.2.2 )を入力する必要があります
次のことを確認できます。
https://github.com/Apache/cordova-plugin-whitelist#content-security-policy
コンテンツセキュリティポリシーには多くの構成があります。
置くだけ
<meta http-equiv="Content-Security-Policy" content="script-src * data: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; media-src *">
それは私を助けました
エラーメッセージ:
次のコンテンツセキュリティポリシーディレクティブに違反しているため、「 http:// some-address 」への接続を拒否しました: "default-src 'self' data:gap: https:// ssl .gstatic.com 'unsafe-eval' "。 「connect-src」は明示的に設定されていないため、「default-src」がフォールバックとして使用されることに注意してください。
Cordova 4/5/6の「cordova create」コマンド
cordova create yourproject com.yoursite.yourproject yourproject
このメタタグでプロジェクトを生成しています
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
Index.htmlファイルを確認する
vi YourProject/plattforms/ios/www/index.html
または
vi YourProject/plattforms/Android/www/index.html
あなたはその行をコメントアウトすることができますが、これはあなた自身のアプリのニーズに合わせることができるポリシーであることを念頭に置いてください、実際にあなたはより多くのガイダンスのために見ることができるリンクがあります:
いくつかのメモ:
* gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
* https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
* Disables use of inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
* Enable inline JS: add 'unsafe-inline' to default-src