CSRF是否可以被JSONP绕过

时间:2013-07-01 01:16:53

标签: jsonp csrf csrf-protection

我对CSRF保护很新,所以请原谅我做出错误的假设或者我是否遗漏了什么,但我想确保我尽我所能阻止CSRF。从我迄今为止的研究中,我发现了以下内容:

  1. 通过在所有HTML POST的请求主体中放置一个nonce参数,使用POST修改数据 ,并在服务器端验证令牌,可以阻止CSRF(并且可能是最好的阻止)在处理请求之前有效。
  2. 恶意网站可以向我的网站发送请求(由nonce阻止),但由于浏览器上存在同源策略,他们无法读取响应。假设某人正在使用安全浏览器,恶意网站无法使用AJAX从我的网站获取网页,请阅读该网站,并自行使用。
  3. 脚本标记在大多数(可能是任何)浏览器中不受同源策略的约束,因此可以允许从其他站点读取内容。
  4. 当我到达第3点时,我决定尝试使用JSONP在Chrome中获取HTML内容;我打开了我的控制台(页面不是来自localhost)并运行以下代码:

    $.ajax({
      url: "http://localhost:8080/my-app/",
      dataType: "jsonp",
      jsonp: "alert"
    }).done(function(data) {
      alert(data);
    });
    

    我在控制台窗口收到的是:

      

    资源解释为脚本但以MIME类型传输   text / html的

    据我所知,浏览器基本上告诉我它收到了内容,继续解析响应,但因为类型不是application / json而停止了。最后,我的问题是,这可能会受到损害吗?即使浏览器无法将响应解析为JSON,它也会有响应。有没有办法可以将此响应解析为HTML,抓住我的CSRF nonce,并破坏我试图强制实施的保护措施?在我看来(我希望这是真的)浏览器不允许这样做,就像他们首先不允许跨域请求进行基本上所有其他通信一样,这就是我们开发人员所依赖的(除了同源政策)保护我们的网站。我的想法是否正确?

0 个答案:

没有答案