App 端安全的解决方案
- 目前 App 的网络通信基本都是用 HTTPS 的服务,但是随便一个抓包工具都是可以看到 HTTPS 接口的详细数据,为了做到防止抓包和无法模拟接口的情况,我们采取以下措施:
- 中间人盗用数据,我们可以采取 HTTPS 证书的双向认证,这样子实现的效果就是中间人在开启抓包软件分析 App 的网络请求的时候,网络会自动断掉,无法查看分析请求的情况
- 对于防止用户模仿我们的请求再次发起请求,我们可以采用 「防重放策略」,用户再也无法模仿我们的请求,再次去获取数据了。
- 对于 App 内的 H5 资源,反爬虫方案可以采用上面的解决方案,H5 内部的网络请求可以通过 Hybrid 层让 Native 的能力去完成网络请求,完成之后将数据回调给 JS。这么做的目的是往往我们的 Native 层有完善的账号体系和网络层以及良好的安全策略、鉴权体系等等。
- 后期会讨论 App 安全性的更深层次玩法,比如从逆向的角度出发如何保护 App 的安全性。
关于 Hybrid 的更多内容,可以看看这篇文章 Awesome Hybrid
- 比如 JS 需要发起一个网络请求,那么按照上面将网络请求让 Native 去完成,然后回调给 JS
- var requestObject = {
- url: arg.Api + "SearchInfo/getLawsInfo",
- params: requestparams,
- Hybrid_Request_Method: 0
- };
- requestHybrid({
- tagname: 'NativeRequest',
- param: requestObject,
- encryption: 1,
- callback: function (data) {
- renderUI(data);
- }
- })
Native 代码(iOS为例)
- [self.bridge registerHandler:@"NativeRequest" handler:^(id data, WVJBResponseCallback responseCallback) {
-
- NSAssert([data isKindOfClass:[NSDictionary class]], @"H5 端不按套路");
- if ([data isKindOfClass:[NSDictionary class]]) {
-
- NSDictionary *dict = (NSDictionary *)data;
- RequestModel *requestModel = [RequestModel yy_modelWithJSON:dict];
- NSAssert( (requestModel.Hybrid_Request_Method == Hybrid_Request_Method_Post) || (requestModel.Hybrid_Request_Method == Hybrid_Request_Method_Get ), @"H5 端不按套路");
-
- [HybridRequest requestWithNative:requestModel hybridRequestSuccess:^(id responseObject) {
-
- NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
- responseCallback([self convertToJsonData:@{@"success":@"1",@"data":json}]);
-
- } hybridRequestfail:^{
-
- LBPLog(@"H5 call Native`s request failed");
- responseCallback([self convertToJsonData:@{@"success":@"0",@"data":@""}]);
- }];
- }
- }];
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|