数据安全

提交用户的隐私数据

  • 一定要使用POST请求提交用户的隐私数据

    GET请求的所有参数都直接暴露在URL中 请求的URL一般会记录在服务器的访问日志中 服务器的访问日志是黑客攻击的重点对象之一

  • 用户的隐私数据

    登录密码 银行账号 … …

数据安全

  • 仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题

    可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据 因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交

  • 常见的加密算法

    MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES

  • 加密算法的选择

    一般公司都会有一套自己的加密方案,按照公司接口文档的规定去加密

MD5

  • 什么是MD5

    • 全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
    • 效果:对输入信息生成唯一的128位散列值(32个字符)
  • MD5的特点

    • 输入两个不同的明文不会得到相同的输出值
    • 根据输出值,不能得到原始的明文,即其过程不可逆(都是扯淡的,算法虽然没办法破解,但是有个蛋疼的哥们有个库,暴力破解)
  • MD5的应用

    由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用 主要运用在数字签名、文件完整性验证以及口令加密等方面

MD5解密网站:http://www.cmd5.com

貌似中文同样可以解密

提交隐私数据的安全过程 – 注册

一般是不可逆的,在注册的那一刻传给数据库的就已经是加密过后的密文。如果是可以找回密码,就说明数据库没有保存加密的密文。

提交隐私数据的安全过程 – 注册

提交隐私数据的安全过程 – 登录

提交隐私数据的安全过程 – 登录

结论

用户的隐私数据,只有在用户输入那一刻是明文,其他情况都是密文处理

代码加密示例

需要导入MD5的一个封装好的三方库

#import "ViewController.h"

#import "NSString+Hash.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString * test = @"34ttt5";
    NSString * md = [test md5String];
    NSLog(@"%@",md);

}

@end

MD5改进

  • 现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
  • 加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
  • 先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
  • … …
  • 总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文

Charles

  • 什么是Charles
    • Charles是一款代理服务器软件,可以用来拦截网络请求
    • 利用Charles能得知大部分公司app的数据来源和数据格式
    • 下载地址:http://www.charlesproxy.com/download/

快速设置

快速设置

手机设置

手机设置

授权手机访问

授权手机访问

Charles中文乱码解决

Charles中文乱码解决

Charles中文乱码解决 -2

检测网络状态

  • 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是

    • 让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
    • 根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
    • WIFI\3G网络:自动下载高清图片
    • 低速网络:只下载缩略图
    • 没有网络:只显示离线的缓存数据
  • 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 Reachability

Reachability

Reachability

常见用法

// 是否WIFI
+ (BOOL) IsEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL) IsEnable3G {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

网络监控

[[NSNotificationCenter defaultCenter] addObserver:self
 selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
self.netReachability = [Reachability reachabilityForInternetConnection];
[self.netReachability startNotifier];

- (void)dealloc
{
    [self.netReachability stopNotifier];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}
  if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
        NSLog(@"是wifi");
    } else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) {
        NSLog(@"是手机自带网络");
    } else {
        NSLog(@"网络有问题");
    }

results matching ""

    No results matching ""