Cordova + JqueryMobile:Ajax失败了

use*_*521 16 android google-chrome jquery-mobile phonegap-plugins cordova

(最近6个小时一直在这里)我正在尝试制作一个phonegap/Cordova应用程序.我无法通过Android模拟器进行Ajax调用(API ver 22,Android> 4.4).Ajax调用适用于Firefox桌面,但即使在Chrome浏览器上也会失败(与模拟器上的情况相同)

cordova --version 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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我看到的错误是:

在chrome远程调试器上:

拒绝连接到' http: //10:20.2.2/test/ getLocation.php ',因为它违反了以下内容安全策略指令:"default-src'self'data:gap:https://ssl.gstatic.com '不安全-EVAL'".请注意,'connect-src'未显式设置,因此'default-src'用作后备.

我在博客和帖子上看到了各种设置,但没有用.把一些在这里删除通常的嫌疑人.

$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
Run Code Online (Sandbox Code Playgroud)

AppManifest可以访问Internet:

<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

config.xml文件:

<access origin="*" /> (have tried all variation, with putting actual server name here like "http://10.0.2.2" ).
Run Code Online (Sandbox Code Playgroud)

真的需要你的帮助.累了又疼了:(

use*_*521 25

我的错...

我正在使用Phonegap示例html template..which有以下元标记阻止XSS.

<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 *">
Run Code Online (Sandbox Code Playgroud)

我不确定将这些东西放在一个示例代码中,是对还是不对..因为我浪费了我的2天.

  • 你到底改变了什么? (13认同)
  • 你做了什么改变才能使它发挥作用? (2认同)

dev*_*evz 10

出于安全原因,您应该保留内容安全策略:

关键的安全机制是同源策略.这限制了来自原始A的文档或脚本如何与来自源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标头,则浏览器同样使用标准的同源策略.



TL;博士

实际上,这已经在示例代码中了.但也许赞扬会很好=).您确实应该保留此配置以提高安全性.

在您的情况下,您必须将配置更改为:

<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">
Run Code Online (Sandbox Code Playgroud)

connect-src限制了您可以连接的源(通过XHR,WebSockets和EventSource).你必须把'self'(对于设备上的脚本)和远程URL(例如http://10.0.2.2)放在这里

  1. @Harry Martel提供了一个很好的链接,其中包含有关如何配置内容安全策略的示例.
  2. 这里也与配置属性的概述的制品.