使用 JQUERY 避免 .getJSON 上的 XSS

Avoid XSS on a .getJSON using JQUERY

我需要从 JSON 中提取数据。我能够这样做:

$.getJSON(MACHINE + '/DailyFoundServlet?csfin=' + sDateFoundArray [i][CODE] + '&found=1&pubblic=true&callback=?', function(data) {

        sDateFoundArray [i][FOUND]=data;
        sDateFoundArray [i][NSER]++;

    })

这个工作正常但不安全,参数 'callback' 容易受到 XSS 攻击。我怎样才能确保我不允许 XSS?

提前致谢!

我开始怀疑你必须使用 JSONP。没有保护回调的方法,它基本上是在您的页面中注入 <script> 并执行代码。仅供参考:jQuery JSONP Security

I will start with this:

There is no difference between jsonp way of working and <Script src='whatever'> </script>

Now , use your imagination what are the pitfalls.

考虑一下,和你的基本一样.getJSON():

$.ajax({
  url: MACHINE + "/DailyFoundServlet",
  dataType: "jsonp",
  data: {
    'csfin': sDateFoundArray [i][CODE],
    'found': 1,
    'public': true
  },
  jsonp: "callback",
  sucess: function(data) {
    sDateFoundArray [i][FOUND]=data;
    sDateFoundArray [i][NSER]++;
  }
});

我还注意到在您的 post 中,URL 字符串显示: pubblic=true 我不确定这是错字还是故意的。我以为这是一个错字。上面的代码仍然存在XSS漏洞。

正如我提到的,如果可以的话,我建议使用 POST 作为更安全的选项。这看起来像:

$.ajax({
  url: MACHINE + "/DailyFoundServlet",
  dataType: "json",
  data: {
    'csfin': sDateFoundArray [i][CODE],
    'found': 1,
    'public': true
  },
  method: "post",
  sucess: function(data) {
    sDateFoundArray [i][FOUND]=data;
    sDateFoundArray [i][NSER]++;
  }
});

此代码适用于返回的数据并且需要 JSON 数据。如果有人试图发回其他数据,如脚本块,它将不会被解释,函数将失败。在将 data 传递回您的变量之前,检查 data 是否有 length 或正确的内容类型也是明智的。类似于:

  sucess: function(data) {
    if(data.length != 0){
      sDateFoundArray [i][FOUND]=data;
      sDateFoundArray [i][NSER]++;
    }
  }