iOS-網(wǎng)絡(luò)請求安全

2016年8月7日

網(wǎng)絡(luò)安全

1 Base64編碼

一般情況下僚匆,Post表單提交和Get參數(shù)提交的情況下微渠,都會暴露用戶信息的。采用Base64將字符串轉(zhuǎn)換成較長的字節(jié)編碼咧擂,達(dá)到隱藏?cái)?shù)據(jù)的目的逞盆。

iOS7.0之后,系統(tǒng)集成了Base64編碼松申,其步驟為

  • 將字符串轉(zhuǎn)換成data
  • 對data轉(zhuǎn)換成base64編碼云芦,參數(shù)傳0即可

代碼:

//1 帶加密字符串
NSString *str = @"hello";
//2 將字符串轉(zhuǎn)換成data
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
//3 加密data--base64--參數(shù)0,沒什么意義
NSString *baseStr = [data base64EncodedStringWithOptions:0];
NSLog(@"%@",baseStr);

終端命令

//編碼 -o表示輸出
base64 123.png -o 123.txt

//解碼 -D表示解碼
base64 123.txt -o 123.png -D

2 MD5散列

3 HTTPS請求

正經(jīng)八百的Https請求贸桶,如果涉及到證書驗(yàn)證等情況舅逸,如果設(shè)置好挑戰(zhàn)后,是不需要設(shè)置Info.plist里面的ATS的皇筛。

原理:

1 客戶端發(fā)起鏈接請求
2 服務(wù)器接收到請求后琉历,會生成私鑰和公鑰。并將公鑰水醋、證書信息旗笔、加密方式等放在一個(gè)受保護(hù)空間中發(fā)給客戶端
3 客戶端接收到這個(gè)challenge后,服務(wù)器驗(yàn)證證書合法性拄踪,并處理證書信任
4 如果服務(wù)器證書ok蝇恶,客戶端會隨機(jī)產(chǎn)生一個(gè)對稱的key,并用服務(wù)器發(fā)來的公鑰加密這個(gè)key,連同客戶端證書一并發(fā)給服務(wù)器
5 服務(wù)器接收到后惶桐,校驗(yàn)客戶端證書合法性撮弧,如果OK潘懊,用服務(wù)器私鑰加密得到客戶端發(fā)來的key。
6 服務(wù)器將響應(yīng)數(shù)據(jù)使用key加密贿衍,然后返回給客戶端授舟,通訊就正式開始了。

3.1 NSURLSession處理HTTPS請求

在使用NSURLSession來處理https請求的時(shí)候舌厨,我們只需要對服務(wù)器發(fā)來的challenge做處理岂却,其他的都有系統(tǒng)為我們處理。拿到challenge后裙椭,如果是需要服務(wù)器信任操作躏哩,我們就需要設(shè)置接收并安裝服務(wù)器證書,設(shè)置信任方式為服務(wù)器信任揉燃。

例如扫尺,我們以訪問https://12306為例,進(jìn)行代碼說明

viewDidLoad方法體(加載后就開始請求)

-(void)viewDidLoad
{
    [super viewDidLoad];
    
    //1 不需要設(shè)置ATS
    //2 創(chuàng)建URL
    NSURL *url = [NSURL URLWithString:@"https://www.12306.cn/mormhweb/"];

    //3 創(chuàng)建request
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //4 創(chuàng)建session--代理為控制器炊汤,configuration為默認(rèn)正驻,代理執(zhí)行隊(duì)列為主隊(duì)列
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    //5 創(chuàng)建數(shù)據(jù)請求任務(wù)--并使用block來處理接收到的數(shù)據(jù)
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    NSLog(@"error----%@",error);
    }];

    //6 開始任務(wù)
    [task resume];

}

設(shè)置代理--用來處理服務(wù)器發(fā)過來的challenge

-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{

    //如果是服務(wù)器證書信任,我們才需要處理
    if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
        //從challenge的受保護(hù)空間中拿到服務(wù)器信任抢腐,用來創(chuàng)建授權(quán)信息--授權(quán)可信任
        NSURLCredential *cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        //調(diào)用block來設(shè)置
        //--NSURLSessionAuthChallengeUseCredential 枚舉類型姑曙,表示使用證書
        //--cre--剛才創(chuàng)建的授權(quán)信息
        completionHandler(NSURLSessionAuthChallengeUseCredential,cre);
    }
}

3.2 AFNetworking處理HTTPS請求

步驟:

  • 添加ATS,在info.plist里面添加屬性
  • 發(fā)送請求之前迈倍,修改manager的安全策略
  • 發(fā)送請求

代碼

- (void)viewDidLoad {
    [super viewDidLoad];


    //1 獲取請求地址
    NSString *url = @"https://www.12306.cn/mormhweb/";

    //2 獲取http請求管理器
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //3 設(shè)置安全策略--對證書-域名等處理方式
    manager.securityPolicy.allowInvalidCertificates = YES;//不管證書是自簽名證書還是CA證書都接收
    manager.securityPolicy.validatesDomainName = NO;//不去校驗(yàn)域名

    //4 設(shè)置manager的其他屬性
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];//--讓接收的響應(yīng)不自動解析伤靠,仍然保持Http的二進(jìn)制數(shù)據(jù)
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"text/html"]];

    //5 發(fā)起Get請求
    [manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"success---%@",responseObject);
    
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
     NSLog(@"error-----%@",error);
    }];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啼染,隨后出現(xiàn)的幾起案子宴合,更是在濱河造成了極大的恐慌,老刑警劉巖迹鹅,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦洽,死亡現(xiàn)場離奇詭異,居然都是意外死亡斜棚,警方通過查閱死者的電腦和手機(jī)阀蒂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟蚀,“玉大人脂新,你說我怎么就攤上這事〈炙螅” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵级零,是天一觀的道長断医。 經(jīng)常有香客問我滞乙,道長,這世上最難降的妖魔是什么鉴嗤? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任斩启,我火速辦了婚禮,結(jié)果婚禮上醉锅,老公的妹妹穿的比我還像新娘兔簇。我一直安慰自己,他們只是感情好硬耍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布垄琐。 她就那樣靜靜地躺著,像睡著了一般经柴。 火紅的嫁衣襯著肌膚如雪狸窘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天坯认,我揣著相機(jī)與錄音翻擒,去河邊找鬼。 笑死牛哺,一個(gè)胖子當(dāng)著我的面吹牛陋气,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播引润,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巩趁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了椰拒?” 一聲冷哼從身側(cè)響起晶渠,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎燃观,沒想到半個(gè)月后褒脯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缆毁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年番川,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脊框。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颁督,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浇雹,到底是詐尸還是另有隱情沉御,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布昭灵,位于F島的核電站吠裆,受9級特大地震影響伐谈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜试疙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一诵棵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祝旷,春花似錦履澳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敌完,卻和暖如春储耐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滨溉。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工什湘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晦攒。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓闽撤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脯颜。 傳聞我的和親對象是個(gè)殘疾皇子哟旗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在網(wǎng)絡(luò)世界中纠脾,安全是一個(gè)很重要的問題背率,以往的HTTP請求已經(jīng)不能承擔(dān)這個(gè)安全任務(wù),抓包工具一抓,你的所有網(wǎng)絡(luò)請求全...
    風(fēng)不會停歇閱讀 4,287評論 6 24
  • 1.數(shù)據(jù)安全 01數(shù)據(jù)安全的原則1)在網(wǎng)絡(luò)上"不允許"傳輸用戶隱私數(shù)據(jù)的"明文"2.)在本地"不允許"保存用戶隱私...
    陳賀閱讀 2,160評論 0 2
  • 1.數(shù)據(jù)安全 01數(shù)據(jù)安全的原則1)在網(wǎng)絡(luò)上"不允許"傳輸用戶隱私數(shù)據(jù)的"明文"2.)在本地"不允許"保存用戶隱私...
    小楓123閱讀 467評論 0 1
  • 1.數(shù)據(jù)安全 01 攻城利器:Charles(公司中一般都使用該工具來抓包宗兼,并做網(wǎng)絡(luò)測試) 注意:Charles在...
    Lucky丶晴閱讀 1,403評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理贵试,服務(wù)發(fā)現(xiàn)宿饱,斷路器陨溅,智...
    卡卡羅2017閱讀 134,654評論 18 139