标签: jsonp

如何安全地将 script-src 与已知的 JSONP 端点托管商(例如 syndicate.twimg.com)结合起来?

我正在使用嵌入推文的页面的内容安全策略,并且我收到了 的报告https:/\xe2\x80\x8b/\xe2\x80\x8bcdn.syndication.twimg.com,这在我的策略中是不允许的。

\n\n

这是一个相当长的政策,但相关部分是

\n\n
default-src \'none\'; ... script-src \'self\' apis.google.com platform.twitter.com; ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果我将cdn.syndication.twimg.com或添加*.twimg.com到标头的一部分,当我通过Google CSP 评估器script-src运行标头时,我会收到警告:

\n\n
\n

cdn.syndication.twimg.com已知托管允许绕过此 CSP 的 JSONP 端点。

\n
\n\n

其他一些域也会引发此警告。

\n\n

看来我进退两难:要么我不允许 Twitter 运行脚本(需要吗?我真的不知道)并收到违反政策的报告,要么我正在运行一个几乎无用的脚本客户服务提供商。

\n\n

有办法摆脱这个难题吗?

\n

jsonp content-security-policy

5
推荐指数
1
解决办法
2149
查看次数

泽西webservice没有返回jsonp

我正在尝试创建一个将返回jsonp的web服务.目前它只返回json

这是我的代码:

@Path("/jsonp")
public class JsonpWebservice {

    @GET
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    public JSONWithPadding readAllP(@QueryParam("jsoncallback") @DefaultValue("jsoncallback") String jsoncallback) 
    {
        ToolKitBean tkBean = new ToolKitBean();
        tkBean.setNegativeCount("10");
        tkBean.setPositiveCount("11");

        System.out.println("jsoncallback: " + jsoncallback); 
        return new JSONWithPadding( new GenericEntity<ToolKitBean>(tkBean) {}, jsoncallback);

    }   

}
Run Code Online (Sandbox Code Playgroud)

我还定义了一个JAXBContext解析器.当我看到这个webservice的响应时,我看到了json而不是jsonp - {"negativeCount":"10","positiveCount":"11"}

有什么想法,我需要做什么才能让jsonP从这个webservice返回?

谢谢DAmien

jsonp jersey

4
推荐指数
1
解决办法
2987
查看次数

同源策略 - JavaScript调用PHP

我知道这是一个热门话题,但我还没有找到一个完全全面的答案.

我正在尝试为我们的"客户"创建一种简单的方法,在他们的网站上放置Google地图,在地图上绘制客户(或其子集)的位置.客户在MySQL数据库中,通过PHP脚本(根据Google的示例)即时转换为XML.这在我的网站上工作正常,但是当我在另一个网站上尝试时,xmlHTTPRequest不允许查看PHP,因为它在另一个域上.

我可以通过在另一个域上编写另一个PHP文件来解决这个问题,该文件只是读取原始域上的PHP文件.但并非所有客户都会在其服务器上运行PHP.有什么方法可以使用JavaScript从我们的数据库返回XML结果吗?

几点:

  1. 使xmlHTTPRequest的JavaScript仍然位于我们的服务器上 - 我们的客户端从脚本标记链接到它.我认为这可能已经足够了,但"起源"(根据Chrome,无论如何)仍被视为域#2

  2. 这很棒:如果我在xmlHTTPRequest中使用绝对引用(例如request.open('GET','http://mydomain.com/api/foo.php',true))那么它将在IE中失败,但是如果我使用相对引用('/api/foo.php')它将起作用.

  3. 我不太了解它,但我可以使用JSON吗?我见过:'script src ="http://..../someData.js?callback = some_func"'但不知道如何,我会让'someData.js'看起来像JSON?(我在功能方面非常考虑,这可能是不正确的?).

  4. 我试过添加:header("Access-Control-Allow-Origin:*"); 到输出XML的PHP​​的顶部,但它并没有真正做到我能说的多少!

  5. 如果我在客户端的服务器上使用PHP包装器,那么使用cURL请求的优势是什么,而不是简单的file_get_contents或fopen?

对不起,很多问题,但任何指导将不胜感激.

非常感谢,

javascript php jsonp xmlhttprequest same-origin-policy

4
推荐指数
1
解决办法
2191
查看次数

使用Windows身份验证的WCF jsonP - 可能吗?

我正在托管一个输出jsonp的wcf服务.IIS的响应(启用了Windows身份验证)是

经过身份验证的服务不支持跨域javascript回调.

有办法解决这个问题吗?我必须打开Windows身份验证,但也想使用wcf来服务我的jsonp

我的网络配置如下

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" >
        <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Ntlm"/>
        </security>
      </binding>
    </webHttpBinding>
  </bindings>
  <services>
    <service name="ServiceSite.CustomersService">
      <endpoint address="" binding="webHttpBinding"
                bindingConfiguration="webHttpBindingWithJsonP" contract="ServiceSite.CustomersService"
                behaviorConfiguration="webHttpBehavior"/>
    </service>
  </services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

iis wcf jsonp

4
推荐指数
1
解决办法
2501
查看次数

在Dojo JSONP请求之后,响应存储在何处?

JavaScript的

例如,我有以下JavaScript代码(已加载Dojo 1.6):

dojo.require("dojo.io.script")

// PART I
var jsonpArgs = {
    url: "http://myapp.appspot.com/query",
    content: {
        id: "1234",
        name: "Juan",
        start_date: "2000-01-01",
        callback: "recover"
    }
};

// PART II
dojo.io.script.get(jsonpArgs).then(function(data) {
    console.log(data);
});

// PART III
function recover(data) {
    console.log(data);
}
Run Code Online (Sandbox Code Playgroud)

从浏览器直接查询

我知道我的服务器将收到查询,就像我在地址栏中键入以下内容一样:

http://myapp.appspot.com/query?id=1234&name=Juan&start_date=2000-01-01&callback=recover
Run Code Online (Sandbox Code Playgroud)

预期的回应

如果我使用浏览器地址栏直接查询我的服务器,我会收到MIME类型application/json和浏览器中呈现的明文,如下所示:

recover(
    {
        id: 1234,
        name: Juan,
        data: [
            ["2000-01-01", 1234],
            ["2000-01-02", 5678]
        ]
    }
);
Run Code Online (Sandbox Code Playgroud)

问题

现在,回顾一下JavaScript的第二部分,我将执行JSONP请求dojo.io.script.get(jsonpArgs).这会返回一个Deferred对象,我可以通过链接来利用.then它.请注意,我将.then事件的处理程序定义为输出捕获data到控制台的事件.

但是,我在控制台中得到的只是一个Event.我试图搜索它的数据树,但我找不到我预期的数据.

  1. 存储JSONP请求的响应在哪里?我怎么找到它?
  2. 我的服务器(我控制)只输出所请求数据的明文呈现,包含在 …

dojo jsonp deferred

4
推荐指数
1
解决办法
2786
查看次数

差异jsonp和简单获取请求(跨域)

我必须使用JQuery和JSON将某些数据发送(并接收)到服务器.到目前为止工作,但不跨域,它必须是跨域的.

我看了解如何解决这个问题并找到了JSONP.据我所知,使用JSONP我必须使用GET发送回调和数据(JQuery允许使用"POST"作为方法,但是当我检查网络流量时,我看到它实际发送GET并且每个都作为参数).

JSONP还需要对服务器进行更改,因为他们期望使用JSON数据发出POST请求,并且他们必须实现一些处理JSONP GET请求的内容.

所以我想知道这与将数据作为GET请求中的关键值参数发送有什么区别?

是否可以使用回调?或究竟是什么?

抱歉有点失落......先谢谢

javascript forms ajax jquery jsonp

4
推荐指数
1
解决办法
3719
查看次数

通过JQuery JSONP调用Google Ajax Search API

我知道这已被问过无数次,但我仍然无法让我的代码工作.我正在尝试从我的Javascript应用程序中进行简单的JSONP调用.鳕鱼片段看起来像:

url="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=AAA&callback=?";
Run Code Online (Sandbox Code Playgroud)

然后是:

$.getJSON(url, function(data) {
    alert('hello 1');
  });
Run Code Online (Sandbox Code Playgroud)

要么:

$.ajax({url: url,
    datatype: 'jsonp',
    success: function(data) { alert("hello 2"); },
    error: function(j, t, e) {  alert(t);}
});
Run Code Online (Sandbox Code Playgroud)

两种方法都不奏效.第二种方法导致"错误"警报.第一个也没有成功.我究竟做错了什么?非常感谢!!

更新:我想我发现至少有一个问题.让我看看这个.

更新2:对不起,这段代码实际上是有效的,至少是第一种方法.这个代码片段周围有一个微妙的错误导致代码无法正常工作,但整体而言这很好.异步调用有时候有点棘手:-)

ajax jquery jsonp

4
推荐指数
1
解决办法
1万
查看次数

从维基百科中获取随机摘录(Javascript,仅限客户端)

我有一个网页,要求用户提供一段文字,然后对其进行一些操作.为了向懒惰用户演示,我想添加一个"我感觉很幸运"的按钮,它将从维基百科中获取一些随机文本并填充输入.

如何使用Javascript从随机的Wikipedia文章中获取一系列文本?

我发现了一些使用Wikipedia API 获取解析文章的例子,但它们往往是服务器端.我正在寻找一个完全来自客户端的解决方案,并且不会受到相同原始策略的影响.

注意随机乱码是不够的; 我需要有意义的人类可读句子.

javascript ajax jsonp wikipedia

4
推荐指数
1
解决办法
3970
查看次数

是否可以通过AJAX加载跨域网页?

我目前正在使用jQM开发移动Web应用程序.

虽然我找到了问题的答案,但我找不到任何好的答案.

这是我的目标:

  1. 下载另一个域中的网页的特定元素.
  2. 通过对话框显示数据.

由于跨域问题,我坚持第一步.

有些人写道如何使用带有回调函数的JSONP,但似乎该技术仅在处理JSON格式时有效.

我还读到,由于安全问题,JavaScript不支持在另一个域中下载html页面.

他们是对的吗?

没有办法通过JavaScript实现我的目标?

javascript ajax jquery jsonp jquery-mobile

4
推荐指数
2
解决办法
9656
查看次数

从jsonp fetch promise获取json

我刚刚开始使用react-native,我正在以文档为基础做经典示例...

fetch('https://facebook.github.io/react-native/movies.json')
  .then((response) => response.json())
  .then((responseJson) => {
    return responseJson.movies;
  })
  .catch((error) => {
    console.error(error);
  });
Run Code Online (Sandbox Code Playgroud)

在这个例子中,这一切都适用于正确的json.

但是,在我的特定情况下,唯一可用的api响应是JSONP而不是JSON.没有基本的JSON可用.所以我收到关于"("的错误.

所以代替JSON就好了

{"id": "1", "movies" : [ { "id" : "123" } ] }
Run Code Online (Sandbox Code Playgroud)

我收到JSONP之类的

?( {"id": "1", "movies" : [ { "id" : "123" } ] });
Run Code Online (Sandbox Code Playgroud)

但是,我不确定我可以做些什么来通过fetch promises获取JSON?如何使用我自己的函数操作响应,还是有更自然的方式?

所以在第一个然后()我不确定我能做些什么来摆脱json(我已经尝试过对响应进行操作,但这似乎只是看看了这个承诺,所以我不确定反应是如何获取的正在运作这个).

javascript json jsonp promise react-native

4
推荐指数
1
解决办法
1万
查看次数