16

(Habe es in den letzten 6 Stunden gewesen) Ich versuche, eine phonegap/Cordova App zu machen. Ich kann keinen Ajax-Anruf über den Android-Emulator (API ver 22, Android> 4.4) durchführen. Der Ajax-Aufruf funktioniert auf Firefox Desktop aber nicht auch auf dem Chrome-Browser (mit der gleichen Ausnahme, wie auf dem Emulator)Cordova + JqueryMobile: Ajax schlägt mit

cordova --Version 5.0.0

Code:

$.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); 
     } 
    }); 

Der Fehler, die ich sehe, ist:

Auf dem Chrom Remote-Debugger:

Abgelehnt, um eine Verbindung zu 'http://10.0.2.2/test/getLocation.php' herzustellen, da die folgende Content Security Policy Direktive verletzt: "default-src 'self' data: lücke: https://ssl.gstatic.com 'unsafe-eval'". Beachten Sie, dass 'connect-src' nicht explizit festgelegt wurde, daher wird 'default-src' als Fallback verwendet.

Ich habe alle Arten von Einstellungen auf Blogs und Posts, aber keine Verwendung. Putting einige hier, um die üblichen Verdächtigen zu entfernen.

$.support.cors = true; 
$.mobile.allowCrossDomainPages = true; 

AppManifest hat Zugang zum Internet:

<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"). 

wirklich Ihre Hilfe auf diesem benötigen. Müde und verletzt :(

Antwort

26

My Bad ...

ich Phonegap Beispiel html wurde mit template..which den folgenden Meta-Tag hatte die XSS versperrte.

<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 *"> 

Ich bin nicht sicher setzen solche Dinge in einem Beispiel-Code, ist die richtige Sache oder not..for mich meine 2 Tage verschwendet

+13

wo genau haben Sie es geändert? –

+2

Welche Änderungen haben Sie vorgenommen, damit es funktioniert? –

10

Sie sollen die Inhalt Sicherheitspolitik aus Sicherheitsgründen halten:

Ein kritischer Sicherheitsmechanismus derSame-Origin-Policy ist. Dies schränkt ein, wie ein Dokument oder Skript von Ursprung A mit einer Ressource von Ursprung B interagieren kann.Dies bedeutet, dass die URL http://store.comany.com/dir/page.html können die folgenden URLs zugreifen:

Aber nicht das:

(Mehr auf: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)

jedoch Angreifer diese Politik mit Cross-site scripting (XSS) umgehen kann

Um XSS und Daten-Injection-Angriffe zu verhindern Sie Inhalt verwenden können, Sicherheitsrichtlinie (von Here):

Content Security Policy (CSP) ist eine zusätzliche Sicherheitsebene, mit der bestimmte Arten von Angriffen erkannt und verringert werden können, einschließlich Cross Site Scripting (XSS) und Dateninjektionsangriffen. Diese Angriffe werden für alles verwendet, von Datendiebstahl bis hin zur Entstellung von Websites oder der Verbreitung von Malware. CSP ist vollständig abwärtskompatibel; Browser, die dies nicht unterstützen, arbeiten immer noch mit Servern, die es implementieren, und umgekehrt. Browser, die CSP nicht unterstützen, ignorieren sie einfach und funktionieren wie gewohnt, indem sie die standardmäßige Richtlinie für denselben Ursprung für Webinhalte standardmäßig übernehmen. Wenn die Site den CSP-Header nicht anbietet, verwenden Browser ebenfalls die Standardrichtlinie für denselben Ursprung.



tl; dr

es tatsächlich schön ist, dass dies bereits im Beispielcode. Aber vielleicht wäre Commend nett =). Sie sollten diese Konfiguration für mehr Sicherheit beibehalten.

In Ihrem Fall würden Sie die Konfiguration so etwas wie folgt ändern:

<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 begrenzt die Ursprünge, auf die Sie eine Verbindung herstellen können (über XHR, WebSockets und Eventsource). Sie müssen hier ‚Selbst‘ setzen (für die Skripte, die auf dem Gerät sind) und die Remote-URL (z http://10.0.2.2)

  1. @Harry Martel eine schöne Verbindung mit Beispielen auf zur Verfügung gestellt, wie Sie Ihren Content Security Policy konfigurieren.
  2. Here ist auch ein Artikel mit einer Übersicht der Konfigurationseigenschaften.
0

Fehlermeldung:

Refused zu 'http://some-address' zu verbinden, weil es die folgenden Content Security Policy Richtlinie verletzt: "default-src 'self' Daten: gap: https://ssl.gstatic.com 'unsicher-eval'". Beachten Sie, dass 'connect-src' nicht explizit festgelegt wurde, daher wird 'default-src' als Fallback verwendet.

Cordova 4/5/6 "cordova erstellen" Befehl

cordova create yourproject com.yoursite.yourproject yourproject 

Projekte mit diesem Meta-Tag

<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 software update

vi YourProject/plattforms/ios/www/index.html 

erzeugt oder

vi YourProject/plattforms/android/www/index.html 

Sie heraus, dass Zeile kommentieren können, sondern nur daran, dass dies eine Politik, die Sie Ihre eigene App Bedürfnisse passen könnte, ist es eigentlich ein Link für mehr Führung sehen konnte:

README: content security policy

Einige Hinweise:

 * 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 
Verwandte Themen