Http與Https的區(qū)別
Http是明文傳輸?shù)模琀ttps協(xié)議是在Http協(xié)議上添加了SSL的加密協(xié)議,可以進行加密傳輸和身份驗證。
其實就是說Http對網(wǎng)絡(luò)傳輸完全是裸奔狀態(tài),也就沒辦法防范中間人攻擊,因為根本沒有加解密措施。不過Https相比Http也只是添加了SSL加密層,所以它仍然是一種特殊的Http,仍然是無狀態(tài)的。
Https的鏈接建立過程
- 根據(jù)訪問的URL,Web服務(wù)器會判斷你是否需要建立Https加密鏈接
- Web服務(wù)器接受到請求之后會將網(wǎng)站的證書,公鑰一起傳輸給請求者
- 請求者與Web服務(wù)器溝通協(xié)商加密等級,也就是安全等級
- 根據(jù)協(xié)商后的加密等級,請求者使用之前Web服務(wù)器傳遞來的網(wǎng)站公鑰加密私鑰,然后傳遞給Web服務(wù)器
- Web服務(wù)器利用自己的私鑰解密傳輸來的信息
- 建立通訊
TCP鏈接的建立過程
常見的Http狀態(tài)碼
一些常見的狀態(tài)碼為:
200 - 服務(wù)器成功返回網(wǎng)頁
404 - 請求的網(wǎng)頁不存在
503 - 服務(wù)不可用
詳細分解:
1xx(臨時響應(yīng))
表示臨時響應(yīng)并需要請求者繼續(xù)執(zhí)行操作的狀態(tài)代碼。
代碼 說明
100 (繼續(xù)) 請求者應(yīng)當(dāng)繼續(xù)提出請求。服務(wù)器返回此代碼表示已收到請求的第一部分,正在等待其余部分。
101 (切換協(xié)議) 請求者已要求服務(wù)器切換協(xié)議,服務(wù)器已確認并準備切換。
2xx (成功)
表示成功處理了請求的狀態(tài)代碼。
代碼 說明
200 (成功) 服務(wù)器已成功處理了請求。通常,這表示服務(wù)器提供了請求的網(wǎng)頁。
201 (已創(chuàng)建) 請求成功并且服務(wù)器創(chuàng)建了新的資源。
202 (已接受) 服務(wù)器已接受請求,但尚未處理。
203 (非授權(quán)信息) 服務(wù)器已成功處理了請求,但返回的信息可能來自另一來源。
204 (無內(nèi)容) 服務(wù)器成功處理了請求,但沒有返回任何內(nèi)容。
205 (重置內(nèi)容) 服務(wù)器成功處理了請求,但沒有返回任何內(nèi)容。
206 (部分內(nèi)容) 服務(wù)器成功處理了部分 GET 請求。
3xx (重定向)
表示要完成請求,需要進一步操作。 通常,這些狀態(tài)代碼用來重定向。
代碼 說明
300 (多種選擇) 針對請求,服務(wù)器可執(zhí)行多種操作。服務(wù)器可根據(jù)請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。
301 (永久移動) 請求的網(wǎng)頁已永久移動到新位置。服務(wù)器返回此響應(yīng)(對 GET 或 HEAD 請求的響應(yīng))時,會自動將請求者轉(zhuǎn)到新位置。
302 (臨時移動) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,但請求者應(yīng)繼續(xù)使用原有位置來進行以后的請求。
303 (查看其他位置) 請求者應(yīng)當(dāng)對不同的位置使用單獨的 GET 請求來檢索響應(yīng)時,服務(wù)器返回此代碼。
304 (未修改) 自從上次請求后,請求的網(wǎng)頁未修改過。服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容。
305 (使用代理) 請求者只能使用代理訪問請求的網(wǎng)頁。如果服務(wù)器返回此響應(yīng),還表示請求者應(yīng)使用代理。
307 (臨時重定向) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,但請求者應(yīng)繼續(xù)使用原有位置來進行以后的請求。
4xx(請求錯誤)
這些狀態(tài)代碼表示請求可能出錯,妨礙了服務(wù)器的處理。
代碼 說明
400 (錯誤請求) 服務(wù)器不理解請求的語法。
401 (未授權(quán)) 請求要求身份驗證。 對于需要登錄的網(wǎng)頁,服務(wù)器可能返回此響應(yīng)。
403 (禁止) 服務(wù)器拒絕請求。
404 (未找到) 服務(wù)器找不到請求的網(wǎng)頁。
405 (方法禁用) 禁用請求中指定的方法。
406 (不接受) 無法使用請求的內(nèi)容特性響應(yīng)請求的網(wǎng)頁。
407 (需要代理授權(quán)) 此狀態(tài)代碼與 401(未授權(quán))類似,但指定請求者應(yīng)當(dāng)授權(quán)使用代理。
408 (請求超時) 服務(wù)器等候請求時發(fā)生超時。
409 (沖突) 服務(wù)器在完成請求時發(fā)生沖突。服務(wù)器必須在響應(yīng)中包含有關(guān)沖突的信息。
410 (已刪除) 如果請求的資源已永久刪除,服務(wù)器就會返回此響應(yīng)。
411 (需要有效長度) 服務(wù)器不接受不含有效內(nèi)容長度標(biāo)頭字段的請求。
412 (未滿足前提條件) 服務(wù)器未滿足請求者在請求中設(shè)置的其中一個前提條件。
413 (請求實體過大) 服務(wù)器無法處理請求,因為請求實體過大,超出服務(wù)器的處理能力。
414 (請求的 URI 過長) 請求的 URI(通常為網(wǎng)址)過長,服務(wù)器無法處理。
415 (不支持的媒體類型) 請求的格式不受請求頁面的支持。
416 (請求范圍不符合要求) 如果頁面無法提供請求的范圍,則服務(wù)器會返回此狀態(tài)代碼。
417 (未滿足期望值) 服務(wù)器未滿足”期望”請求標(biāo)頭字段的要求。
5xx(服務(wù)器錯誤)
這些狀態(tài)代碼表示服務(wù)器在嘗試處理請求時發(fā)生內(nèi)部錯誤。 這些錯誤可能是服務(wù)器本身的錯誤,而不是請求出錯。
代碼 說明
500 (服務(wù)器內(nèi)部錯誤) 服務(wù)器遇到錯誤,無法完成請求。
501 (尚未實施) 服務(wù)器不具備完成請求的功能。例如,服務(wù)器無法識別請求方法時可能會返回此代碼。
502 (錯誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)。
503 (服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機維護)。通常,這只是暫時狀態(tài)。
504 (網(wǎng)關(guān)超時) 服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時從上游服務(wù)器收到請求。
505 (HTTP 版本不受支持) 服務(wù)器不支持請求中所用的 HTTP 協(xié)議版本。
HttpWatch狀態(tài)碼Result is
200 - 服務(wù)器成功返回網(wǎng)頁,客戶端請求已成功。
302 - 對象臨時移動。服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,但請求者應(yīng)繼續(xù)使用原有位置來進行以后的請求。
304 - 屬于重定向。自上次請求后,請求的網(wǎng)頁未修改過。服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容。
401 - 未授權(quán)。請求要求身份驗證。 對于需要登錄的網(wǎng)頁,服務(wù)器可能返回此響應(yīng)。
404 - 未找到。服務(wù)器找不到請求的網(wǎng)頁。
2xx - 成功。表示服務(wù)器成功地接受了客戶端請求。
3xx - 重定向。表示要完成請求,需要進一步操作??蛻舳藶g覽器必須采取更多操作來實現(xiàn)請求。例如,瀏覽器可能不得不請求服務(wù)器上的不同的頁面,或通過代理服務(wù)器重復(fù)該請求。
4xx - 請求錯誤。這些狀態(tài)代碼表示請求可能出錯,妨礙了服務(wù)器的處理。
5xx - 服務(wù)器錯誤。表示服務(wù)器在嘗試處理請求時發(fā)生內(nèi)部錯誤。 這些錯誤可能是服務(wù)器本身的錯誤,而不是請求出錯。
Cookie、SessionStorage、LocalStorage
共同點:都是保存在瀏覽器端,并且是同源的
Cookie
cookie數(shù)據(jù)始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務(wù)器間來回傳遞。而sessionStorage和localStorage不會自動把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存。cookie數(shù)據(jù)還有路徑(path)的概念,可以限制cookie只屬于某個路徑下,存儲的大小很小只有4K左右。Cookie的有效期由預(yù)先指定的過期時間決定。 (key:可以在瀏覽器和服務(wù)器端來回傳遞,存儲容量小,只有大約4K左右)
在同源請求中始終存在,且存儲量較小,僅在客戶端本地保存
sessionStorage
僅在當(dāng)前瀏覽器窗口關(guān)閉前有效,自然也就不可能持久保持,localStorage:始終有效,窗口或瀏覽器關(guān)閉也一直保存,因此用作持久數(shù)據(jù);cookie只在設(shè)置的cookie過期時間之前一直有效,即使窗口或瀏覽器關(guān)閉。(key:本身就是一個會話過程,關(guān)閉瀏覽器后消失,session為一個會話,當(dāng)頁面不同即使是同一頁面打開兩次,也被視為同一次回話)
同一個會話指的是當(dāng)前瀏覽器頁面
localStorage
localStorage 在所有同源窗口中都是共享的,且LocalStorage是永久保存的,除非手動清除數(shù)據(jù);cookie也是在所有同源窗口中都是共享的。(key:同源窗口都會共享,并且不會失效,不管窗口或者瀏覽器關(guān)閉與否都會始終生效)
補充說明一下cookie的作用:
保存用戶登錄狀態(tài)。例如將用戶id存儲于一個cookie內(nèi),這樣當(dāng)用戶下次訪問該頁面時就不需要重新登錄了,現(xiàn)在很多論壇和社區(qū)都提供這樣的功能。 cookie還可以設(shè)置過期時間,當(dāng)超過時間期限后,cookie就會自動消失。因此,系統(tǒng)往往可以提示用戶保持登錄狀態(tài)的時間:常見選項有一個月、三個 月、一年等。
Cookie與Session的聯(lián)系
Cookie是存在瀏覽器本地的,由于Http協(xié)議是無狀態(tài)的,所以Cookie的主要作用之一就是存儲SessionID,而Session是Web服務(wù)器用來保存與某一指定客戶端的會話信息,使用SessionID來進行標(biāo)識。
CSRF與XSS攻擊
CSRF
跨站請求偽造 Cross-site request forgery,可以理解為攻擊者盜用了用戶的身份,以用戶的名義發(fā)送了惡意請求。比如用戶登錄了一個網(wǎng)站后,立刻在另一個tab頁面訪問攻擊者用來制造攻擊的網(wǎng)站,這個網(wǎng)站要求訪問剛剛登錄的網(wǎng)站,并發(fā)送了一個惡意請求,這時候CSRF就產(chǎn)生了,比如這個制造攻擊的網(wǎng)站使用一張圖片,但是這種圖片的鏈接卻是可以修改數(shù)據(jù)庫的,這時候攻擊者就可以以用戶的名義操作這個數(shù)據(jù)庫,防御方式的話:使用驗證碼,檢查https頭部的refer,使用token
一個簡單的例子
假如一家銀行用以運行轉(zhuǎn)賬操作的URL地址如下: https://bank./withdraw?account=AccoutName&amount=1000&for=PayeeName
那么,一個惡意攻擊者可以在另一個網(wǎng)站上放置如下代碼: <img src="https://bank./withdraw?account=Alice&amount=1000&for=Badman" />
如果有賬戶名為Alice的用戶訪問了惡意站點,而她之前剛訪問過銀行不久,登錄信息尚未過期,那么她就會損失1000資金。
這種惡意的網(wǎng)址可以有很多種形式,藏身于網(wǎng)頁中的許多地方。此外,攻擊者也不需要控制放置惡意網(wǎng)址的網(wǎng)站。例如他可以將這種地址藏在論壇,博客等任何用戶生成內(nèi)容的網(wǎng)站中。這意味著如果服務(wù)端沒有合適的防御措施的話,用戶即使訪問熟悉的可信網(wǎng)站也有受攻擊的危險。
透過例子能夠看出,攻擊者并不能通過CSRF攻擊來直接獲取用戶的賬戶控制權(quán),也不能直接竊取用戶的任何信息。他們能做到的,是欺騙用戶的瀏覽器,讓其以用戶的名義運行操作。
XSS
跨站腳本攻擊,是說攻擊者通過注入惡意的腳本,在用戶瀏覽網(wǎng)頁的時候進行攻擊,比如獲取cookie,或者其他用戶身份信息,可以分為存儲型和反射型,存儲型是攻擊者輸入一些數(shù)據(jù)并且存儲到了數(shù)據(jù)庫中,其他瀏覽者看到的時候進行攻擊,反射型的話不存儲在數(shù)據(jù)庫中,往往表現(xiàn)為將攻擊代碼放在url地址的請求參數(shù)中,防御的話為cookie設(shè)置httpOnly屬性,對用戶的輸入進行檢查,進行特殊字符過濾.
當(dāng)網(wǎng)景(Netscape)最初推出JavaScript語言時,他們也察覺到準許網(wǎng)頁服務(wù)器發(fā)送可執(zhí)行的代碼給一個瀏覽器的安全風(fēng)險(即使僅是在一個瀏覽器的沙盒里)。它所造成的一個關(guān)鍵的問題在于用戶同時開啟多個瀏覽器視窗時,在某些例子里,網(wǎng)頁里的片斷代碼被允許從另一個網(wǎng)頁或對象取出資料,而因為惡意的網(wǎng)站可以用這個方法來嘗試竊取機密信息,所以在某些情形,這應(yīng)是完全被禁止的。為了解決這個問題,瀏覽器采用了同源決策——僅允許來自相同域名系統(tǒng)和使用相同協(xié)議的對象與網(wǎng)頁之間的任何交互。這樣一來,惡意的網(wǎng)站便無法借由JavaScript在另一個瀏覽器竊取機密資料。此后,為了保護用戶免受惡意的危害,其他的瀏覽器與服務(wù)端指令語言采用了類似的訪問控制決策。
XSS漏洞可以追溯到1990年代。大量的網(wǎng)站曾遭受XSS漏洞攻擊或被發(fā)現(xiàn)此類漏洞,如Twitter[1],Facebook[2],MySpace,Orkut ,新浪微博和百度貼吧 。研究表明,最近幾年XSS已經(jīng)超過緩沖區(qū)溢出成為最流行的攻擊方式,有68%的網(wǎng)站可能遭受此類攻擊。根據(jù)開放網(wǎng)頁應(yīng)用安全計劃(Open Web Application Security Project)公布的2010年統(tǒng)計數(shù)據(jù),在Web安全威脅前10位中,XSS排名第2,僅次于代碼注入(Injection)。
|