1.log输出会被中奖者截获,暴露信息,影响app得性能

在工程里面的pch文件加入以下代码

// 调试状态

#define LMLog(...) NSLog(__VA_ARGS__)

#else

//  发布状态

#define LMLog(...)

#endif /* PersonLife_pch */

#ifdef DEBUG

#define NSLog(...) NSLog(__VA_ARGS__)

#define debugMethod() NSLog(@"%s", __func__)

#else

#define NSLog(...)

#define debugMethod()

然后在工程里面写product---scheme,编辑成release

调试开发阶段编辑成debug模式 进行调试开发

2.登录请求最好用post请求,把用户信息放在请求体里面更加安全

如果是H5的登录页做登录的,则需要后台把前端用到的参数拼在get请求后面,在H5后面MD5加密在拼在get请求的后面的参数,更加安全

3.做代码混淆

提高代码的安全性,使代码变得难读,推荐使用ZMConfuse,在github上可搜索到

使用方法:在终端 cd + ZMConfus ,把混淆的工程拷贝到当前目录下,根据需求修改.sh文件

再次打开工程,会报一些错误 ,修改pch的路径就好,在终端拖入终端,点回车即可 执行脚本命令

再次打开工程,就出现混淆的代码,对类,属性,方法,函数进行混淆,是代码完全失去了可读性。

(注意文件名和类的命名的规则,需注意如一样找不到对应的错误,会报编译错误,造成混淆错误)

4.使用新设备时需要进行验证授权  ---如微信

不同设备重复登录校验问题 :第一次登录账号绑定设备uuid,用第二部手机时再次登录同一账号时,服务器首先比较uuid uuid 不同注销当前掉当前的用户 弹出alert 用手机验证码进行验证,验证成功绑定uuid,实现微信号一对多的存储在服务端后台中实现账号登录  以此类推,实现不同设备重复登录校验。

5.https的双重验证问题  需要后台提供相关的证书进行认证即可

这里是系统验证的方法

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

//直接验证服务器是否被认证(serverTrust),这种方式直接忽略证书验证,信任该connect

SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust];

return [[challenge sender] useCredential: [NSURLCredential credentialForTrust: serverTrust]

forAuthenticationChallenge: challenge];

if ([[[challenge protectionSpace] authenticationMethod] isEqualToString: NSURLAuthenticationMethodServerTrust]) {

do

{

SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust];

NSCAssert(serverTrust != nil, @"serverTrust is nil");

if(nil == serverTrust)

break; /* failed */

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书名称" ofType:@"cer"];//自签名证书

NSData* caCert = [NSData dataWithContentsOfFile:cerPath];

NSString *cerPath2 = [[NSBundle mainBundle] pathForResource:@"证书名称" ofType:@"cer"];//SSL证书

NSData * caCert2 = [NSData dataWithContentsOfFile:cerPath2];

NSCAssert(caCert != nil, @"caCert is nil");

if(nil == caCert)

break; /* failed */

NSCAssert(caCert2 != nil, @"caCert2 is nil");

if (nil == caCert2) {

break;

}

SecCertificateRef caRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert);

NSCAssert(caRef != nil, @"caRef is nil");

if(nil == caRef)

break; /* failed */

SecCertificateRef caRef2 = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert2);

NSCAssert(caRef2 != nil, @"caRef2 is nil");

if(nil == caRef2)

break; /* failed */

NSArray *caArray = @[(__bridge id)(caRef),(__bridge id)(caRef2)];

NSCAssert(caArray != nil, @"caArray is nil");

if(nil == caArray)

break; /* failed */

OSStatus status = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)caArray);

NSCAssert(errSecSuccess == status, @"SecTrustSetAnchorCertificates failed");

if(!(errSecSuccess == status))

break; /* failed */

SecTrustResultType result = -1;

status = SecTrustEvaluate(serverTrust, &result);

if(!(errSecSuccess == status))

break; /* failed */

NSLog(@"stutas:%d",(int)status);

NSLog(@"Result: %d", result);

BOOL allowConnect = (result == kSecTrustResultUnspecified) || (result == kSecTrustResultProceed);

if (allowConnect) {

NSLog(@"success");

}else {

NSLog(@"error");

}

if(! allowConnect)

{

break; /* failed */

}

#if 0

/* Treat kSecTrustResultConfirm and kSecTrustResultRecoverableTrustFailure as success */

/*   since the user will likely tap-through to see the dancing bunnies */

if(result == kSecTrustResultDeny || result == kSecTrustResultFatalTrustFailure || result == kSecTrustResultOtherError)

break; /* failed to trust cert (good in this case) */

#endif

// The only good exit point

NSLog(@"信任该证书");

return [[challenge sender] useCredential: [NSURLCredential credentialForTrust: serverTrust]

forAuthenticationChallenge: challenge];

}

while(0);

}

// Bad dog

return [[challenge sender] cancelAuthenticationChallenge: challenge];

}

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {

return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];

}

//目前APP检测遇到这些问题,已解决 希望有所能对你帮助   共勉

iOS 应用关于弥补安全优化问题的更多相关文章

  1. 转 iOS和android游戏纹理优化和内存优化(cocos2d-x)

    iOS和android游戏纹理优化和内存优化(cocos2d-x) (未完成) 1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x不同平台读取纹理的机制不同.ios下面使用CGImage, ...

  2. iOS离屏渲染之优化分析

    在进行iOS的应用开发过程中,有时候会出现卡顿的问题,虽然iOS设备的性能越来越高,但是卡顿的问题还是有可能会出现,而离屏渲染是造成卡顿的原因之一.因此,本文主要分析一下离屏渲染产生的原因及避免的方法 ...

  3. iOS开发笔记之TableView优化

    TableView相信只要是做iOS开发的就不会陌生,目前大多数iOS的app都是采用TabBar+NavigationBar+TableViewController这一主流框架, 既然用的这么频繁, ...

  4. iOS异步图片加载优化与常用开源库分析

    网络图片显示大体步骤: 1.下载图片: 2.图片处理(裁剪,边框等): 3.写入磁盘: 4.从磁盘读取数据到内核缓冲区: 5.从内核缓冲区复制到用户空间(内存级别拷贝): 6.解压缩为位图(耗cpu较 ...

  5. iOS进阶之页面性能优化

    转载:http://www.jianshu.com/p/1b5cbf155b31 前言 在软件开发领域里经常能听到这样一句话,"过早的优化是万恶之源",不要过早优化或者过度优化.我 ...

  6. iOS - ipa安装包大小优化

    在App Store上显示的下载大小和实际下载下来的大小,我们通过下表做一个对比: iPhone型号 系统 AppStore 显示大小 下载到设备大小 iPhone6 10.2.1 91.5MB 88 ...

  7. IOS学习笔记45--UITableView性能优化

    说实话,面试的时候已经被问到几次这个问题,然后就搜索了一下,看到了这篇优化文章,感觉不错,转来日后作为一种UITableView优化的方法. 使用不透明视图.      不透明的视图可以极大地提高渲染 ...

  8. iOS开发:UITableView的优化技巧-异步绘制Cell

    最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优 ...

  9. iOS开发系列之性能优化(上)

    本篇主要记录一下我对界面优化上的一些探索.关于时间优化的探索将会在中篇里进行介绍.下篇将主要介绍一些耗电优化.安装包瘦身的探索. ### 1.卡顿原理 要了解卡顿原理,需要对帧缓冲区.垂直同步.CPU ...

随机推荐

  1. esri-leaflet部分瓦片缺失问题及解决办法

    esri-leaflet加载TileLayer的时候,有时候由于数据的原因,造成部分瓦片缺失的问题,网页加载TileLayer的时候,当地图范围正好拖动到缺失的范围的时候,会一直请求 http://d ...

  2. java-7继承

    请自行编写代码测试以下特性(动手动脑):在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. public class QWE {    public void main(String[] ...

  3. wpf中子窗口的几个问题

    今天研究了一下wpf中的窗口,写这篇文章来总结一下今天的收获.(转载请注明出处~) 总所周知,窗口是windows系统中十分重要的一个元素(从名字上就能体现出来),而一个应用程序总是包含很多窗口(主窗 ...

  4. FastDFS+Nginx部署详细教程

    本例使用到的所有tar和zip包地址:http://download.csdn.net/detail/corey_jk/9758664 本例中使用CentOS1.CentOS2两台机器实现. 1 GC ...

  5. devexpress表格控件gridcontrol特殊应用(一)——实现禁用特定行(附源代码)

    一些特殊的项目中会存在一些特殊需求,如需要禁用特定行.这时候gridcontrol的一般属性是实现不了的,就需要做一些更改.这时候你就需要去devexpress官网中找寻些资料(官网https://w ...

  6. index_merge引发的死锁排查

    概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁.通过定位排查发现 ...

  7. 1574: [Usaco2009 Jan]地震损坏Damage

    1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 232[Subm ...

  8. 476. Number Complement

    题目 Given a positive integer, output its complement number. The complement strategy is to flip the bi ...

  9. TypeScript设计模式之解释器

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  10. 双系统删除Ubuntu后出现grub界面而无法正常启动Windows系统的解决方法

    第一次安装双系统的时候由于不怎么会弄,设置了ubuntu引导windows,这种方法是非常不推荐的,因为当ubuntu出现问题或者是当你不再使用ubuntu的时候,删除ubuntu就会成为一个很麻烦的 ...