针对XSS文本过滤jQuery ajax请求的JSON响应

时间:2013-08-23 14:06:54

标签: javascript jquery ajax json xss

我陷入了一个愚蠢的问题,即服务器在添加XSS安全文本的情况下提供JSON响应。

服务器只提供两种响应:

  1. 包含隐藏输入字段的HTML页面,其中包含我想要的值
  2. JSON字符串,其值可以优选地转换为JS 对象。
  3. 问题是,为了防止JavaScript XSS攻击,JSON响应是这样的:

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

    所以这是jQuery parseerror方法中的ajax,因此在error回调中。

    我该如何解决这个问题?

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

    error: function(jqXHR) {
        removeJSCode (jqXHR.responseText);
    }
    
    // ...
    
    function removeJSCode(json) {
        .. Code to filter the response
    }
    

    但这不起作用。

1 个答案:

答案 0 :(得分: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);','');
    }
    ...
});