0

我陷入了一个愚蠢的问题,即服务器给出 JSON 响应并添加了 XSS 安全文本。

服务器只给出两种响应:

  1. 带有隐藏输入字段的 HTML 页面,其中包含我想要的值
  2. JSON 字符串,其值最好转换为 JS 对象。

问题是,为了防止 JavaScript XSS 攻击,JSON 响应是这样的:

while(1);{
    "name": {
        "abc": "123",
        ...
        }
    }

所以这parseerror在 jQueryajax方法中,因此在error回调中。

我该如何解决?

另外,我尝试在错误函数中添加一个钩子并更改 JSON 数据:

error: function(jqXHR) {
    removeJSCode (jqXHR.responseText);
}

// ...

function removeJSCode(json) {
    .. Code to filter the response
}

但这不起作用。

4

1 回答 1

0

jQuery在其配置中$.ajax具有属性。dataFilter给它传递一个函数,它会在 jQuery 接收到 ajax 数据之后运行,但在jQuery 有机会接触它之前。

该函数提供字符串响应作为第一个参数和数据类型作为第二个参数。第二个参数将取决于您是否传入dataType了配置。

在那里,您可以使用.replace('while(1);','')并返回函数中的字符串以供 jQuery 解析。

$.ajax({
    ...
    dataType : 'json',
    dataFilter : function(response,type){
      //if not JSON, don't do anything with it
      if(type !== 'json') return response;
      //otherwise, replace and return
      return response.replace('while(1);','');
    }
    ...
});
于 2013-08-23T14:21:02.857 回答