app的安全性设计策略

软件安全(Software Security)就是使软件在收到恶意攻击的情形下依然能够继续正确运行及确保软件被在授权范围内合法使用的思想。
2017年5月13日,安全极客在无需物理接触、无需拆解门锁的情况下秒破智能门锁,获得所有的开锁密码,这是来自2017国际安全极客大赛GeekPwn香港站上出现的一幕。而被破解产品正是已广泛应用于自如、小猪、途家等B端市场的“果加互联网智能锁wifi公寓版”。
网络攻击分:主动攻击(篡改消息, 伪造,拒绝服务,回放)和被动攻击(流量分析, 窃听)。
软件系统通常是登录成功后才能访问核心资源,控制好登录就大大提高了软件安全性。用户通过监听应用向服务器发送的请求,用工具伪造消息来攻击服务器来骗取资源,也可能通过破解手机,直接读取应用的本地文件窃取用户信息。
密码要用md5保存编码,发送时也用md5编码后的密码。md5是单向加密,相同的字符串经过md5加密得到的字符串相同,并且编码后的字符串可以当网络请求字符串,不错在非法网络字符。机密数据(如:用户名和密码)不要用普通文件读写(NSFileManager等)方法记录机密数据,用NSUserDefaults存储。
NSUserDefaults userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:value forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
不同的请求发送到不同的url,这样就增加了服务的并发处理能力。
借鉴联通VAC(增值业务平台)的AAA接口定义的消息结构,发送消息的消息有命令字cmdCode,可以便于消息的跟踪,visitTime为发送消息时的时间,key=softkey1+cmdCode+time(long)进行md5加密后混淆,phoneId为通过needPhoneIdPhone.htm从服务器获取到的字符串。softkey1为约定字符串,如:dmko%^7
*(0dfsd。该消息接口能保证安全的向服务器发送请求,并得到服务合法性校验。
2015-06-23 17:59:59:943 FHL[336:807] API.m:-[API requestWithMethod:URLString:parameters:error:]:197 Debug:request paramters:{
cmdCode = 0005;
key = 24CD74EFF781C86EB2219C0BA0A5E32B;
phoneId = “ios_120e438f-9757-451d-b980-0d87824b02eb”;
pushPhoneParam = “token:9ee99652 0c1955ac be0cb7a3 afceeec9 df156e10 b7153641 bd5946f3 e7f39e7a”;
visitTime = 1435053599;
}
request url:http://test.c.cn/b/phone/a/d.htm?cmdCode=0005&key=24CD74EFF781C86EB2219C0BA0A5E32B&phoneId=ios_120e438f-9757-451d-b980-0d87824b02eb&pushPhoneParam=token%3A9ee99652 0c1955ac be0cb7a3 afceeec9 df156e10 b7153641 bd5946f3 e7f39e7a&visitTime=1435053599

imei获得方式:[[UIDevice currentDevice] identifierForVendor]
phoneId通过needPhoneIdPhone.htm从服务器获取到的字符串,其中的phoneId为默认字符串,服务器会返回正确的phoneId。
2015-06-23 18:26:54:490 FHL[362:807] API.m:-[API requestWithMethod:URLString:parameters:error:]:197 Debug:request paramters:{
cmdCode = 0000;
imei = “A196D974-4545-562EEE0A794F”;
key = 9997EF3481E78796DFED17887335EBCC;
phoneId = “ios_44545er”;
visitTime = 1435055214;
}
响应消息的key为:key= softkey2+cmdCode+time(long)进行md5加密后混淆。softkey2为约定字符串,如:drrr^7*dfsdf。消息头字段固定:cmdCode,innerMessage(提示语),result,resultKyey(服务器合法校验key),visitTime。消息体为响应结果,可能为空集。
2015-06-23 18:41:25:131 FHL[362:807] API.m:__46-[API httpRequestWithRequest:success:failure:]_block_invoke:431 Debug:responseObject:{
body = {
canMyCourierRank = 1;
canNotMyCourierRankMessage = “”;
cityCode = 110100;
cityName = “\U5317\U4eac\U5e02”;
countyCode = 110101;
countyName = “\U4e1c\U57ce\U533a”;
courierCode = 2125873;
courierName = “\U674e\U96f6\U56db”;
courierRank = 1;
courierRankName = “\U4e00\U7ea7\U5148\U950b\U5b98”;
courierRankUrl = “http://test.zuixiandao.cn/fhl/statics/css/images/dispatchCourierRank1_small.png”;
courierType = 2;
deliveryExperience = 1;
downloadUrl = “”;
grabCityCode = 330100;
grabCityName = “\U676d\U5dde\U5e02”;
grabProvinceCode = 330000;
grabProvinceName = “\U6d59\U6c5f\U7701”;
handoverWarnCount = 5;
handoverWarnInterval = 2;
handoverWarnStart = 5;
hasNewVersion = 0;
headPortraitUrl = 432t1426737315000;
idNumber = 211481198401154411;
idPic1Url = 432t1426737315000;
idPic2Url = 432t1426737315000;
needUpgrade = 0;
provinceCode = 110000;
provinceName = “\U5317\U4eac”;
rankChangeContent = “”;
rankChangeTitle = “”;
reason = “”;
receivingWarnCount = 5;
receivingWarnInterval = 3;
receivingWarnStart = 10;
shareUrl = “http://t.cn/RAPoRa5”;
statusId = 3;
telCode = 0571;
vehicle = 2;
};
head = {
cmdCode = 1001;
innerMessage = “”;
message = “\U7cfb\U7edf\U7e41\U5fd9\Uff0c\U8bf7\U7a0d\U540e”;
result = 1;
resultKey = DD4552;
visitTime = 1435056084;
};
}

服务器:收到消息根据约定字符串和参数产生key,比较计算的key和发送请求的key是否一致,若不一致判定为伪造消息。拿系统的当前时间和请求的visitTime比较看是否超过180秒,若超过消息返回失败(防止伪造消息)。
客户端:
收到响应消息根据约定字符串和参数产生key,比较计算的key和响应的key是否一致,若不一致判定为伪造消息。拿系统的当前时间和响应消息的visitTime比较看是否超过180秒,若超过消息返回失败(防止伪造消息)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值