【问题标题】:AFNetworking 2.0 JSON Vulnerability ProtectionAFNetworking 2.0 JSON 漏洞防护
【发布时间】: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 吗?

谢谢,

沙哈尔。

【问题讨论】:

    标签: ios json afnetworking-2


    【解决方案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];
    }
    

    解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2021-05-01
      相关资源
      最近更新 更多