AFNetworking 通过 HTTPS 发出 post 请求

Posted

技术标签:

【中文标题】AFNetworking 通过 HTTPS 发出 post 请求【英文标题】:AFNetworking make post requests via HTTPS 【发布时间】:2015-07-18 10:36:41 【问题描述】:

在我的 iphone 应用程序中,目前我正在使用 AFHTTPRequestOperationManager 将发布请求发送到我的服务器并获取数据。

但我注意到我的一些应用用户已经破解了这些发布请求并更改了发布请求的值以增加他们在应用中的硬币。

所以我想让这些整个帖子请求加密/https(我什至不知道这个术语)。我希望用户无法编辑这些帖子请求。

有没有办法通过 AFNetworking 做到这一点?我需要一个发布请求的示例和读取该请求的 php 示例。我搜索了谷歌,但找不到任何容易理解的东西。下面是我目前使用的 HTTP 请求模板。请详细解答,我不是AFNetworking或PHP方面的专家。

NSString *url = [NSString stringWithFormat:@"%@getlist-s.php", [Globals getSiteUrl]];
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

        NSDictionary *params = @@"user_id": [Globals loggedInUser].Id,
                                 @"action": @"get_list",
                                 @"offset": [NSString stringWithFormat:@"%d", offset]
                                 ;

        [manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) 


         failure:^(AFHTTPRequestOperation *operation, NSError *error) 
            NSLog(@"Error: %@ %@", error, operation.responseString);

        ];

【问题讨论】:

对于 AFNetworking,这仅意味着使用 https: 前缀而不是 http: 前缀调用 API 端点。但是,您必须在服务器上启用 HTTPS(打开 443 端口,购买并上传 SSL 证书...)。 取决于使用的身份验证等,这应该会有所帮助,但请考虑请求可能来自您的应用程序以外的其他东西,例如来自终端或自定义客户端的 curl。用户可能会使用代理执行 MITM 攻击以修改发布数据。对于一个真正安全的方案,您可能需要领域专家将其组合在一起。但您可能会很高兴只是降低欺诈程度。 【参考方案1】:

您可以简单地重新配置您的网络服务器以使用 HTTPS 而不是 HTTP。 这使用端口 443 而不是 80,并且需要 SSL 证书。幸运的是,您不再支付这些费用,您可以通过 LetsEncrypt 免费获得一个。我建议关闭 HTTP 端点,这样用户就不能继续使用旧版本。

然后您可以更新您的代码,使所有端点都是 HTTPS 而不是 HTTP。

HTTPS 不仅会加密请求和响应的内容,还会加密域名后 URL 中的任何内容,从而使中间人攻击变得更加困难。也就是说,这不是一个万无一失的方法,因为用户仍然可以使用自己的根证书 MITM 他们自己的设备,但他们将如何去做这超出了这个答案的范围。

另一个安全层是使用 HMAC(基于哈希的消息验证码)。

应用程序将通过获取请求参数和共享秘密并使用安全散列算法对其进行散列并将其作为附加参数添加到请求中来生成一个。 服务器可以通过获取提供的参数、使用相同的共享密钥、以完全相同的方式对它们进行散列并检查提供的 HMAC 和它刚刚生成的 HMAC 是否相同来验证它是否正确(并且请求是真实的)。

确保您的共享密钥在应用程序和您的服务器之间保持秘密并且永远不会在两者之间传输,这一点很重要。如果您想聪明一点,您可以根据某些通用参数动态生成共享密钥,但这可能会变得复杂、容易出错并影响合法用户。

这是一场猫捉老鼠的游戏,没有什么是完美的,如果有人真的想要欺骗系统,那么他们会这样做,但这应该可以阻止大多数临时攻击者。

【讨论】:

以上是关于AFNetworking 通过 HTTPS 发出 post 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 AFNetworking 传递 facebook 访问令牌

无法发出 POST 请求 - AFNetworking

发出太多 AFNetworking 请求时超时

无法使用 AFNetworking 发出 POST 请求

如何在 AFNetworking 的帮助下发出 Twilio api Post 请求?

如何使用 AFNetworking 或 STHTTPRequest 发出 SOAP Web 服务请求?