您的位置:首页 > 移动开发

app的安全性设计策略

2015-06-16 17:41 344 查看
软件安全(Software Security)就是使软件在收到恶意攻击的情形下依然能够继续正确运行及确保软件被在授权范围内合法使用的思想。

网络攻击分:主动攻击(篡改消息, 伪造,拒绝服务)和被动攻击(流量分析, ***)。

软件系统通常是登录成功后才能访问核心资源,控制好登录就大大提高了软件安全性。用户通过监听应用向服务器发送的请求,用工具伪造消息来攻击服务器来骗取资源,也可能通过破解手机,直接读取应用的本地文件窃取用户信息。

密码要用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%200c1955ac%20be0cb7a3%20afceeec9%20df156e10%20b7153641%20bd5946f3%20e7f39e7a&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秒,若超过消息返回失败(防止伪造消息)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: