我陷入了一个愚蠢的问题,即服务器在添加XSS安全文本的情况下提供JSON响应。
服务器只提供两种响应:
问题是,为了防止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
}
但这不起作用。
答案 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);','');
}
...
});