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 编码的 GET 请求?
具有大型 JSON 响应的 AFNetworking 2.0