網(wǎng)絡(luò)整理(二)——HTTP請(qǐng)求和數(shù)據(jù)安全

1 HTTP請(qǐng)求

重點(diǎn):1.超文本傳輸協(xié)議. 2.http請(qǐng)求過(guò)程.
{

1> http協(xié)議: 超文本傳輸協(xié)議(Hypertext Transfer Protocol)
{
    http協(xié)議規(guī)定了客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式.
    
    http協(xié)議是在網(wǎng)絡(luò)開(kāi)發(fā)中最常用的協(xié)議.不管是移動(dòng)客戶端還是PC端,訪問(wèn)網(wǎng)絡(luò)資源經(jīng)常使用http協(xié)議.
    
    http優(yōu)點(diǎn):
    
    <1> 簡(jiǎn)單快速:
        http協(xié)議簡(jiǎn)單,通信速度很快.
    
    <2> 靈活:
        http協(xié)議允許傳輸任意類型的數(shù)據(jù).
    
    <3> http協(xié)議是短連接(非持續(xù)性連接)
        http協(xié)議限制每次連接只處理一個(gè)請(qǐng)求,服務(wù)器對(duì)客戶端的請(qǐng)求作出響應(yīng)后,馬上斷開(kāi)連接.這種方式可以節(jié)省傳輸時(shí)間.
}

2> http協(xié)議的使用;

完整的http通信分為兩步:

<1> 請(qǐng)求:客戶端向服務(wù)器索要數(shù)據(jù).
{
    http協(xié)議規(guī)定:一個(gè)完整的http請(qǐng)求包含'請(qǐng)求行','請(qǐng)求頭','請(qǐng)求體'三個(gè)部分;
    
    '請(qǐng)求行':包含了請(qǐng)求方法,請(qǐng)求資源路徑,http協(xié)議版本.
    
    "GET /resources/images/ HTTP/1.1"
    
    '請(qǐng)求頭':包含了對(duì)客戶端的環(huán)境描述,客戶端請(qǐng)求的主機(jī)地址等信息.
    
    Accept: text/html // 客戶端所能接收的數(shù)據(jù)類型
    Accept-Language: zh-cn // 客戶端的語(yǔ)言環(huán)境
    Accept-Encoding: gzip // 客戶端支持的數(shù)據(jù)壓縮格式
    Host: m.baidu.com // 客戶端想訪問(wèn)的服務(wù)器主機(jī)地址
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0 // 客戶端的類型,客戶端的軟件環(huán)境
   
    '請(qǐng)求體':客戶端發(fā)給服務(wù)器的具體數(shù)據(jù),比如文件/圖片等.
}

<2> 響應(yīng):服務(wù)器返回客戶端想要的數(shù)據(jù).
{
    http協(xié)議規(guī)定:一個(gè)完整的http響應(yīng)包含'狀態(tài)行','響應(yīng)頭','實(shí)體內(nèi)容'三個(gè)部分;
    
    '狀態(tài)行':包含了http協(xié)議版本,狀態(tài)嗎,狀態(tài)英文名稱.
    
    "HTTP/1.1 200 OK"
    
    '響應(yīng)頭':包含了對(duì)服務(wù)器的描述,對(duì)返回?cái)?shù)據(jù)的描述.

    Content-Encoding: gzip // 服務(wù)器支持的數(shù)據(jù)壓縮格式
    Content-Length:  1528 // 返回?cái)?shù)據(jù)的長(zhǎng)度
    Content-Type:  application/xhtml+xml;charset=utf-8 // 返回?cái)?shù)據(jù)的類型
    Date: Mon, 15 Jun 2015 09:06:46 GMT // 響應(yīng)的時(shí)間
    Server: apache  // 服務(wù)器類型
    
    '實(shí)體內(nèi)容':服務(wù)器返回給客戶端的具體數(shù)據(jù)(圖片/html/文件...).
}

3> 發(fā)送http請(qǐng)求:
{
    在iOS開(kāi)發(fā)中,發(fā)送http請(qǐng)求的方案有很多,常見(jiàn)的有如下幾種:
    <1> 蘋(píng)果原生:
    {
        * NSURLConnection:用法簡(jiǎn)單,古老經(jīng)典的一種方案.(iOS 9.0后棄用)
    
        * NSURLSession:iOS7以后推出的技術(shù),功能比NSURLConnection更加強(qiáng)大.(常用)
    
        * CFNetWork:NSURL 的底層,純C語(yǔ)言,(一般不用).
    }
    
    <2> 第三方框架:
    {
        * ASIHttpRequest:http終結(jié)者,功能很強(qiáng)大,可惜作者已停止更新.
        
        * AFNetWorking:簡(jiǎn)單易用,提供了基本夠用的常用功能,維護(hù)和使用者多.(常用)
        
        * MKNetWorkKit:簡(jiǎn)單易用,產(chǎn)自印度,維護(hù)和使用者少.
    }
    
    在開(kāi)發(fā)中,一般使用第三方框架.
}

}


2 GET 和 POST

重點(diǎn):1.GET 和 POST的區(qū)別? 2.用POST方法發(fā)送登陸請(qǐng)求.
{

<1> http方法:
http協(xié)議定義了很多方法對(duì)應(yīng)不同的資源操作,其中最常用的是GET 和 POST 方法.
{
    { GET、POST、OPTIONS届榄、HEAD、PUT秦效、DELETE、TRACE涎嚼、CONNECT阱州、PATCH }
    
    增:PUT
    刪:DELETE
    改:POST
    查:GET
}

<2> 參數(shù)
{
    因?yàn)?GET 和 POST 可以實(shí)現(xiàn)上述所有操作,所以,在現(xiàn)實(shí)開(kāi)發(fā)中,我們只要會(huì)用GET 和 POST 方法就可以了.
    
    在與服務(wù)器交互時(shí),有時(shí)候需要給服務(wù)器發(fā)送一些數(shù)據(jù),比如登錄時(shí)需要發(fā)送用戶名和密碼.
    
    參數(shù):就是指?jìng)鬟f給服務(wù)器的具體數(shù)據(jù).
}

<3> GET 和 POST 的主要區(qū)別表現(xiàn)在參數(shù)的傳遞上.

"GET":
{
    GET的本質(zhì)是從服務(wù)器得到數(shù)據(jù),效率更高.并且GET請(qǐng)求可以被緩存.
    
    '注意': 網(wǎng)絡(luò)緩存數(shù)據(jù),保存在SQLite的數(shù)據(jù)庫(kù)中(路徑:NSHomeDirectory()).
    查看緩存數(shù)據(jù)命令行:
    'cd 文件目錄'   (打開(kāi)文件目錄)
    'ls'   查看當(dāng)前文件下目錄
    'sqlite3 Cache.db'   打開(kāi)數(shù)據(jù)庫(kù)
    '.tables'    查看數(shù)據(jù)庫(kù)中的表單
    'select * from cfurl_cache_response;'   查看服務(wù)器響應(yīng)緩存
    'select * from cfurl_cache_receiver_data;'   查看服務(wù)器返回的數(shù)據(jù)緩存

    在請(qǐng)求 URL 后面以 ? 的形式跟上發(fā)給服務(wù)器的參數(shù),參數(shù)以 "參數(shù)名"="參數(shù)值"的形式拼接,多個(gè)參數(shù)之間用 & 分隔.

    注意:GET的長(zhǎng)度是有限制的,不同的瀏覽器有不同的長(zhǎng)度限制,一般在2~8K之間.
}

"POST":
{
    POST的本質(zhì)是向服務(wù)器發(fā)送數(shù)據(jù),也可以獲得服務(wù)器處理之后的結(jié)果,效率不如GET.POST請(qǐng)求不可以被緩存,每次刷新之后都需要重新提交表單.

    發(fā)送給服務(wù)器的參數(shù)全部放在'請(qǐng)求體'中;

    理論上,POST傳遞的數(shù)據(jù)量沒(méi)有限制.

    注意:所有涉及到用戶隱私的數(shù)據(jù)(密碼/銀行卡號(hào)等...)都要用POST的方式傳遞.
}

<4>注意:URL中不能出現(xiàn)空格以及中文等特殊符號(hào).

1>URL中,所有的字符都必須是 ASCII 碼;

2>URL中不能出現(xiàn)中文和特殊符號(hào)(如空格);

所以,如果 URL 中出現(xiàn)了中文,需要添加百分號(hào)轉(zhuǎn)譯.
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

<5> POST 發(fā)送登陸請(qǐng)求:

注意:

1> 用可變請(qǐng)求: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

2> 指定請(qǐng)求方法: request.HTTPMethod = @"POST";

3> 設(shè)置請(qǐng)求體數(shù)據(jù): request.HTTPBody = data;

// 實(shí)例化請(qǐng)求體字符串
NSString *body = [NSString stringWithFormat:@"username=%@&password=%@",self.userName.text,self.password.text];
// 將字符串轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];

4> 發(fā)送異步網(wǎng)絡(luò)請(qǐng)求.
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    
    // NSURLResponse *response: 服務(wù)器響應(yīng)
    
    // NSData *data: 服務(wù)器返回的數(shù)據(jù)
    
    // NSError *connectionError: 連接錯(cuò)誤處理
    
    // 網(wǎng)絡(luò)請(qǐng)求的回調(diào).
}]

}


3 保存用戶信息

重點(diǎn):1.偏好設(shè)置保存用戶信息.
{

<1>如果用戶登陸成功,就保存用戶信息.下次直接從偏好設(shè)置中讀取用戶信息,以此做到用戶只需要輸入一次賬號(hào)和密碼,以后登陸就可以不用再次輸入.

1>.登陸成功,保存用戶信息(偏好設(shè)置)
2>.再次進(jìn)入,直接顯示用戶之前保存的信息.避免用戶重復(fù)輸入.

// 偏好設(shè)置存儲(chǔ)用戶信息
-(void)savaUserInfo
{
    // 實(shí)例化偏好設(shè)置對(duì)象(單例)
    NSUserDefaults *User = [NSUserDefaults standardUserDefaults];
    // 保存用戶名
    [User setObject:self.userName.text forKey:kITUSERNAMEKEY];
    // 保存用戶密碼
    [User setObject:pass forKey:kITUSERPASSKEY];
    // 同步保存用戶信息
    [User synchronize];
}

// 加載偏好設(shè)置中的用戶信息
- (void)loadUserInfo
{
    NSUserDefaults *User = [NSUserDefaults standardUserDefaults];
    
    if ([User objectForKey:ITUSERNAMEKEY]) {
        
        self.userName.text = [User objectForKey:ITUSERNAMEKEY];
        
    }if ([User objectForKey:ITUSERPASSKEY]) {
        
        self.password.text = [User objectForKey:ITUSERPASSKEY];
        
    };
}

<2> 用戶登陸業(yè)務(wù)邏輯
{
    // <1> 用戶登陸需要一個(gè)單獨(dú)的控制器,因?yàn)橹恍枰顷懸淮?Login.storyboard). 應(yīng)用程序需要有一個(gè)入口:main.storyboard: app 主頁(yè)面
    
    // <2> 判斷用戶是否登陸成功過(guò)(通過(guò)偏好設(shè)置中存儲(chǔ)的用戶信息判斷)
    // 1> 如果偏好設(shè)置中存有用戶信息(說(shuō)明之前登陸成功過(guò)),直接進(jìn)入 app 主頁(yè)面 :main.storyboard
    // 2> 如果偏好設(shè)置中不存在用戶信息(第一次登陸或者之前注銷了用戶信息),進(jìn)入登陸界面 :Login.storyboard
    
    // <3> 如果用戶登陸成功,跳轉(zhuǎn)到 app 主頁(yè)面:main.storyboard.并且在偏好設(shè)置中保存用戶信息.
    
    // <4> 如果用戶點(diǎn)擊注銷按鈕,注銷用戶信息,返回到登陸頁(yè)面.
}


<3> 問(wèn)題: 用戶密碼不能以明文的形式保存,需要對(duì)用戶密碼加密之后再保存!

密碼的安全原則:

1> 本地和服務(wù)器都不允許保存用戶的密碼明文.

2> 在網(wǎng)絡(luò)上,不允許傳輸用戶的密碼明文.

現(xiàn)代密碼學(xué)趣聞! 中途島海戰(zhàn)(AF)

<4> 數(shù)據(jù)加密算法:

1> 對(duì)稱加密算法:加密和解密使用同一密鑰.加密解密速度快,要保證密鑰安全.適合給大數(shù)據(jù)加密.

2> 非對(duì)稱加密算法:使用公鑰加密,私鑰解密.或者使用私鑰加密,公鑰解密.更加安全,但是加密解密速度慢,適合給小數(shù)據(jù)加密.

<5> 小技巧:

openssl :是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法,常用的密鑰和證書(shū)封裝管理功能以及 SSL 協(xié)議.提供豐富的應(yīng)用程序測(cè)試功能.

終端命令:

    echo hello |openssl md5
    echo hello |openssl sha1
    echo hello |openssl sha -sha256
    echo hello |openssl sha -sha512

}


4 信息安全加密

了解:常用加密方法: 1> base64 2> MD5 3> MD5加鹽 4> HMAC 5> 時(shí)間戳密碼(用戶密碼動(dòng)態(tài)變化)
{

1> base64
{
    base64 編碼是現(xiàn)代密碼學(xué)的基礎(chǔ).
    
    原本是 8個(gè)bit 一組表示數(shù)據(jù),改為 6個(gè)bit一組表示數(shù)據(jù),不足的部分補(bǔ)零,每 兩個(gè)0 用 一個(gè) = 表示.
    用base64 編碼之后,數(shù)據(jù)長(zhǎng)度會(huì)變大,增加了大約 1/3 左右.
    
    base64 基本能夠達(dá)到安全要求,但是,base64能夠逆運(yùn)算,非常不安全!
    base64 編碼有個(gè)非常顯著的特點(diǎn),末尾有個(gè) '=' 號(hào).
    
    利用終端命令進(jìn)行base64運(yùn)算:
    
        // 將文件 meinv.jpg 進(jìn)行 base64運(yùn)算之后存儲(chǔ)為 meinv.txt
        base64 meinv.jpg -o meinv.txt
    
        // 講meinv.txt 解碼生成 meinv.png
        base64 -D meinv.txt -o meinv.png
    
        // 將字符串 "hello" 進(jìn)行 base 64 編碼 結(jié)果:aGVsbG8=
        echo "hello" | base64
    
        // 將 base64編碼之后的結(jié)果 aGVsbG8= 反編碼為字符串
        echo aGVsbG8= | base64 -D
}

2> MD5 -- (信息-摘要算法) 哈希算法之一.
{

    把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)度的十六進(jìn)制的大整數(shù). 注意,字符串的轉(zhuǎn)換過(guò)程是不可逆的.

    用于確保'信息傳輸'完整一致.

    MD5特點(diǎn):
    
    *1.壓縮性:   任意長(zhǎng)度的數(shù)據(jù),算出的 MD5 值長(zhǎng)度都是固定的.
    *2.容易計(jì)算: 從原數(shù)據(jù)計(jì)算出 MD5 值很容易.
    *3.抗修改性: 對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改一個(gè)字節(jié),所得到的 MD5 值都有很大區(qū)別.
    *4.弱抗碰撞: 已知原數(shù)據(jù)和其 MD5 值,想找到一個(gè)具有相同 MD5 值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的.
    *5.強(qiáng)抗碰撞: 想找到兩個(gè)不同數(shù)據(jù),使他們具有相同的 MD5 值,是非常困難的.
    
    MD5 應(yīng)用:
    
    *1. 一致性驗(yàn)證: MD5 將整個(gè)文件當(dāng)做一個(gè)大文本信息,通過(guò)不可逆的字符串變換算法,產(chǎn)生一個(gè)唯一的 MD5 信息摘要.就像每個(gè)人都有自己獨(dú)一無(wú)二的指紋,MD5 對(duì)任何文件產(chǎn)生一個(gè)獨(dú)一無(wú)二的"數(shù)字指紋".
    
        利用 MD5 來(lái)進(jìn)行文件校驗(yàn), 被大量應(yīng)用在軟件下載站,論壇數(shù)據(jù)庫(kù),系統(tǒng)文件安全等方面.
    
    *2. 數(shù)字簽名;
    
    *3. 安全訪問(wèn)認(rèn)證;

}

3> MD5加鹽
{
    MD5 本身是不可逆運(yùn)算,但是,目前網(wǎng)絡(luò)上有很多數(shù)據(jù)庫(kù)支持反查詢.
    
    MD5加鹽 就是在密碼哈希過(guò)程中添加的額外的隨機(jī)值.
    
    注意:加鹽要足夠長(zhǎng),足夠復(fù)雜.
}

4> HMAC
{
    HMAC 利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出.
    
    HMAC 主要使用在身份認(rèn)證中;
    
    認(rèn)證流程:
    
        *1. 客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求.
        *2. 服務(wù)器接收到請(qǐng)求后,生成一個(gè)'隨機(jī)數(shù)'并通過(guò)網(wǎng)絡(luò)傳輸給客戶端.
        *3. 客戶端將接收到的'隨機(jī)數(shù)'和'密鑰'進(jìn)行 HMAC-MD5 運(yùn)算,將得到的結(jié)構(gòu)作為認(rèn)證數(shù)據(jù)傳遞給服務(wù)器.
        (實(shí)際是將隨機(jī)數(shù)提供給 ePass,密鑰也是存儲(chǔ)在 ePass中的)
        *4. 與此同時(shí),服務(wù)器也使用該'隨機(jī)數(shù)'與存儲(chǔ)在服務(wù)器數(shù)據(jù)庫(kù)中的該客戶'密鑰'進(jìn)行 HMAC-MD5 運(yùn)算,如果
        服務(wù)器的運(yùn)算結(jié)果與客戶端傳回的認(rèn)證數(shù)據(jù)相同,則認(rèn)為客戶端是一個(gè)合法用法.
    
}

5> 時(shí)間戳密碼(用戶密碼動(dòng)態(tài)變化)
{
    相同的密碼明文 + 相同的加密算法 ===》 每次計(jì)算都得出不同的結(jié)果.可以充分保證密碼的安全性.
    
    原理:將當(dāng)前時(shí)間加入到密碼中;
    
    因?yàn)槊看蔚顷憰r(shí)間都不同,所以每次計(jì)算出的結(jié)果也都不相同.
    
    服務(wù)器也需要采用相同的算法.這就需要服務(wù)器和客戶端時(shí)間一致.
    
    注意:服務(wù)器端時(shí)間和客戶端時(shí)間,可以有一分鐘的誤差(比如:第59S發(fā)送的網(wǎng)絡(luò)請(qǐng)求,一秒鐘后服務(wù)器收到并作出響應(yīng),這時(shí)服務(wù)器當(dāng)前時(shí)間比客戶端發(fā)送時(shí)間晚一分鐘).
    
    這就意味著,服務(wù)器需要計(jì)算兩次(當(dāng)前時(shí)間和一分鐘之前兩個(gè)時(shí)間點(diǎn)各計(jì)算一次).只要有一個(gè)結(jié)果是正確的,就可以驗(yàn)證成功!
    
}

// IP輔助/手機(jī)綁定...

}


5 鑰匙串訪問(wèn)

重點(diǎn): 1.鑰匙串訪問(wèn)
{

蘋(píng)果在 iOS 7.0.3 版本以后公布鑰匙串訪問(wèn)的SDK. 鑰匙串訪問(wèn)接口是純C語(yǔ)言的.

鑰匙串使用 AES 256加密算法,能夠保證用戶密碼的安全.

鑰匙串訪問(wèn)的第三方框架(SSKeychain),是對(duì) C語(yǔ)言框架 的封裝.注意:不需要看源碼.

鑰匙串訪問(wèn)的密碼保存在哪里?只有蘋(píng)果才知道.這樣進(jìn)一步保障了用戶的密碼安全.

使用步驟:
{
    // 獲取應(yīng)用程序唯一標(biāo)識(shí).
    
    NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;
    
    // 1.利用第三方框架,將用戶密碼保存在鑰匙串
    
    [SSKeychain setPassword:self.pwdText.text forService:bundleId account:self.usernameText.text];
    
    "注意"三個(gè)參數(shù):
    
    1.密碼:可以直接使用明文.鑰匙串訪問(wèn)本身是使用 AES 256加密,就是安全的.所以使用的時(shí)候,直接傳遞密碼明文就可以了.
    
    2.服務(wù)名:可以隨便亂寫(xiě),建議唯一! 建議使用 bundleId.
    
    bundleId是應(yīng)用程序的唯一標(biāo)識(shí),每一個(gè)上架的應(yīng)用程序都有一個(gè)唯一的 bundleId
    
    3.賬戶名:直接用用戶名稱就可以.
    
    // 2.從鑰匙串加載密碼
    
    self.pwdText.text = [SSKeychain passwordForService:bundleId account:self.usernameText.text];
}

}


6 指紋識(shí)別

重點(diǎn): 1.指紋識(shí)別用法
{

指紋識(shí)別功能是 iphone 5S之后推出的.SDK是 iOS 8.0 推出!

推出指紋識(shí)別功能的目的,是為了簡(jiǎn)化移動(dòng)支付環(huán)節(jié),占領(lǐng)移動(dòng)支付市場(chǎng).

使用步驟:
{
    1> 導(dǎo)入框架;
#import <LocalAuthentication/LocalAuthentication.h>
    
    2> 指紋識(shí)別的實(shí)現(xiàn):
    {
        1. 需要判斷手機(jī)系統(tǒng)版本是否是 iOS 8.0 以上的版本.只有 iOS 8.0 以上才支持.
        
        // 獲得當(dāng)前系統(tǒng)版本號(hào)
        float version = [UIDevice currentDevice].systemVersion.floatValue;
        
        if (version < 8.0 ) // 判斷當(dāng)前系統(tǒng)版本
        {
            NSLog(@"系統(tǒng)版本太低,請(qǐng)升級(jí)至最新系統(tǒng)");
            return;
        }
        
        2. 實(shí)例化指紋識(shí)別對(duì)象,判斷當(dāng)前設(shè)備是否支持指紋識(shí)別功能(是否帶有TouchID).
        
        // 1> 實(shí)例化指紋識(shí)別對(duì)象
        LAContext *laCtx = [[LAContext alloc] init];
        
        // 2> 判斷當(dāng)前設(shè)備是否支持指紋識(shí)別功能.
        if (![laCtx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL])
        { // 如果設(shè)備不支持指紋識(shí)別功能
            
            NSLog(@"該設(shè)備不支持指紋識(shí)別功能");
            
            return;
        };
        
        3.指紋登陸(默認(rèn)是異步方法)
        // 指紋登陸
        [laCtx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指紋登陸" reply:^(BOOL success, NSError *error)
         {
             // 如果成功,表示指紋輸入正確.
             if (success) {
                 NSLog(@"指紋識(shí)別成功!");
                 
             }else
             {
                 NSLog(@"指紋識(shí)別錯(cuò)誤,請(qǐng)?jiān)俅螄L試");
             }
         }];
    }
}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市法梯,隨后出現(xiàn)的幾起案子苔货,更是在濱河造成了極大的恐慌,老刑警劉巖立哑,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夜惭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡刁憋,警方通過(guò)查閱死者的電腦和手機(jī)滥嘴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)木蹬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)至耻,“玉大人若皱,你說(shuō)我怎么就攤上這事〕就牵” “怎么了走触?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疤苹。 經(jīng)常有香客問(wèn)我互广,道長(zhǎng),這世上最難降的妖魔是什么卧土? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任惫皱,我火速辦了婚禮,結(jié)果婚禮上尤莺,老公的妹妹穿的比我還像新娘旅敷。我一直安慰自己,他們只是感情好颤霎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布媳谁。 她就那樣靜靜地躺著,像睡著了一般友酱。 火紅的嫁衣襯著肌膚如雪晴音。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天缔杉,我揣著相機(jī)與錄音锤躁,去河邊找鬼。 笑死或详,一個(gè)胖子當(dāng)著我的面吹牛进苍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸭叙,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼觉啊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了沈贝?” 一聲冷哼從身側(cè)響起杠人,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宋下,沒(méi)想到半個(gè)月后嗡善,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡学歧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年罩引,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枝笨。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袁铐,死狀恐怖揭蜒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剔桨,我是刑警寧澤屉更,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站洒缀,受9級(jí)特大地震影響瑰谜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜树绩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一萨脑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饺饭,春花似錦砚哗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至军援,卻和暖如春仅淑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胸哥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工涯竟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人空厌。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓庐船,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親嘲更。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筐钟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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