AFNetworking 2.0 JSON 漏洞防护

Posted

技术标签:

【中文标题】AFNetworking 2.0 JSON 漏洞防护【英文标题】:AFNetworking 2.0 JSON Vulnerability Protection 【发布时间】:2014-07-30 16:23:26 【问题描述】:

我在我的 ios 应用中使用 AFNetworking 2.+, 我的服务器使用 JSON 漏洞保护。

这使我对服务器的请求“工作一半”。 意思是,我的请求确实得到了代码 200,但请求失败。 我无法解析 json。

我正在使用 AFHTTPRequestOperationManager 并像这样设置他的序列化器:

    [self setResponseSerializer:[AFJSONResponseSerializer serializer]];
    [self setRequestSerializer:[AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted]];

我也试过了:

  [self setResponseSerializer:[AFJSONResponseSerializer serializer]];
  [self setRequestSerializer:[AFJSONRequestSerializer serializer]];

效果也不好。

据我所知,JSON Vulnerability Protection 在真正的 json 之前添加了“)]'”,如图here in angular docs

JSON 漏洞保护 JSON 漏洞允许第三方 网站在某些情况下将您的 JSON 资源 URL 转换为 JSONP 请求 条件。为了解决这个问题,您的服务器可以为所有 JSON 请求添加前缀 使用以下字符串 ")]',\n"。 Angular 会自动剥离 将其作为 JSON 处理之前的前缀。

例如如果你的服务器需要返回:

['一个','两个']

容易受到攻击,你的服务器可以返回:

)]', ['一','二']

AFNetworking 提供给我的工具有什么方法可以解决这个问题吗?

我应该使用自定义的 AFJSONRequestSerializer 吗?

谢谢,

沙哈尔。

【问题讨论】:

【参考方案1】:

回答我自己...

我实现了

并添加了该方法:

    -(id)responseObjectForResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError *__autoreleasing *)error

    NSString * jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    if (jsonString && [jsonString hasPrefix:@")]',"]) 
        jsonString = [jsonString substringFromIndex:@")]',".length];
    
    NSData *newData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    return [NSJSONSerialization JSONObjectWithData:newData options:0 error:nil];

解决了这个问题。

【讨论】:

以上是关于AFNetworking 2.0 JSON 漏洞防护的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 2.0 异常解析 JSON

如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?

具有大型 JSON 响应的 AFNetworking 2.0

AFNetworking 2.0 图片上传和 JSON 返回错误

连接 JSON AFnetworking 2.0

从 AFNetworking 2.0 加载带有 JSON 的 UITableView