Web安全筆記 2: Web通訊知識拓展
阿新 • • 發佈:2021-01-11
file、http、ftp協議
file://
表示本地檔案傳輸協議,可訪問本地目錄檔案。如訪問共享路徑,可輸入file://192.168.59.12/Media
(Media是共享資料夾的名稱,因為一臺機可部署不同的資料夾,所以以名稱來區別)http://
超文字傳輸協議,是用於全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。如果在本地架設http服務,再選擇一個資料夾作為站點,則相當於是簡單的全球資訊網伺服器,只需輸入http://ip:埠/
即可看到資料夾下的內容。如果需要在一個機子上不同位置部署多個http伺服器,需要確保埠唯一ftp://
檔案傳輸協議,預設埠是21,必須有ftp伺服器,然後部署ftp站點,然後通過ftp://ip:埠
http請求報文中的請求方式
1 | GET | 請求指定頁面資訊,並返回實體主體 |
2 | HEAD | 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
3 | POST | 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案),資料被包含在請求體中,POST請求可能會導致新的資源的建立或已有資源的修改 |
4 | PUT | 從客戶端向伺服器傳送的資料取代指定的文件的內容 |
5 | DELETE | 請求伺服器刪除指定頁面 |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器 |
7 | OPTIONS | 允許客戶檢視伺服器的效能 |
8 | TRACE | 回顯伺服器收到的請求,主要用於測試或診斷 |
部分請求報文和響應報文各欄位的含義
User-Agent
:瀏覽器表明自己的身份(是哪種瀏覽器)。例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;rv:1.8.1.14)Gecko/20080404 Firefox/2.0.0.14Host
:客戶端指定自己想訪問的Web伺服器的域名或IP地址和埠號。例如:Host:rss.sina.com.cnX-Frame-Options
:可以指示是否允許瀏覽器在frame、embed和object裡渲染。許多站點利用這個頭欄位避免 clickjacking攻擊。簡單來說就是可以使用程式模擬使用者惡意點選頁面相關的DOM元素,比如在登陸頁面點選登陸按鈕等,造成頁面短時間內登陸動作頻繁造成伺服器有壓力從而達到攻擊目的server
:告訴客戶端當前正在提供Web服務的軟體名稱和版本號。例如:Server: openresty/1.15.8.1Set-Cookie
:伺服器設定客戶端的cookie資訊,以便管理客戶端狀態。例如:Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31Content-Type
:說明了實現主體物件的媒體型別。用type/subtype形式賦值。例如:ontent-Type: text/html; charset=UTF-8HttpOnly
:使JavaScript指令碼無法獲得Cookie。其主要目的是防止XSS跨站指令碼攻擊對Cookie資訊的獲取。Set-Cookie: name=value; HttpOnly
通過該操作,Web頁面還可以對cookie進行讀取操作,但使用JavaScript的document.cookie就無法讀取附加HttpOnly屬性後的cookie的內容了,因此也就無法在XSS中利用JavaScript劫持Cookie了
Base64編碼
- Base64是一種基於64個可見字元來表示二進位制資料的表示方法
Base64編碼的原理
-
Base64可以將ASCII字串或者是二進位制編碼成只包含A—Z,a—z,0—9,+,/ 這64個字元( 26個大寫字母,26個小寫字母,10個數字,1個+,一個 / 剛好64個字元)。這64個字元用6個bit位就可以全部表示出來,一個位元組有8個bit 位,那麼還剩下兩個bit位,這兩個bit位用0來補充。其實,一個Base64字元仍然是8個bit位,但是有效部分只有右邊的6個 bit,左邊兩個永遠是0。
-
Base64的編碼規則是將3個8位位元組(3×8=24位)編碼成4個6位的位元組(4×6=24位),之後在每個6位位元組前面,補充兩個0,形成4個8位位元組的形式,那麼取值範圍就變成了0~63。又因為2的6次方等於64,所以每6個位組成一個單元。
HTTP基本認證
- 客戶端(例如Web瀏覽器):伺服器,請把/family/son.jpg 圖片傳給我。GET /family/son.jpg HTTP/1.1
- 伺服器:客戶端你好,這個資源在安全區family裡,是受限資源,需要基本認證,請帶上你的使用者名稱和密碼再來 HTTP/1.1 401 Authorization Required www-Authenticate: Basic realm= "family" 伺服器會返回401,告知客戶端這個資源需要使用基本認證的方式訪問,我們可以看到在 www-Authenticate這個Header裡面 有兩個值,Basic:說明需要基本認證,realm:說明客戶端需要輸入這個安全區的使用者名稱和密碼,而不是其他區的。因為伺服器可以為不同的安全區設定不同的使用者名稱和密碼。如果伺服器只有一個安全區,那麼所有的基本認證使用者名稱和密碼都是一樣的。
- 客戶端: 伺服器,我已經按照你的要求,攜帶了相應的使用者名稱和密碼資訊了,你看一下如果客戶端是瀏覽器,那麼此時就會彈出一個彈窗,讓使用者輸入使用者名稱和密碼。Basic 內容為: 使用者名稱:密碼 後的base64 內容.假設我的使用者名稱為Shusheng007,密碼為ss007 那麼我的Basic的內容為 Shusheng007:ss007 對應的base64 編碼內容U2h1c2hlbmcwMDcldUZGMUFzczAwNw,如下所示 GET /family/son.jpg HTTP/1.1 Authorization: Basic U2h1c2hlbmcwMDcldUZGMUFzczAwNw
- 伺服器:客戶端你好,我已經校驗了你的使用者名稱和密碼,是正確的,這是你要的資源。 HTTP/1.1 200 OK Content-type: image/jpg ...
基本認證的缺點
- 使用者HTTP是在網路上裸奔的,所以這個基本認證的使用者名稱和密碼也是可以被人看到的,雖然它使用了Base64來編碼,但這個編碼很容易就可以解碼出來
- 即使這個認證內容不能被解碼為原始的使用者名稱和密碼也是不安全的,惡意使用者可以再獲取了認證內容後使用其不斷的向伺服器發起請求,這就是所謂的重放攻擊
- 像中間人攻擊就更不能防止了,中間人可以修改報文然後請求伺服器
HTTP和HTTPS的區別和聯絡
- 簡單來說,HTTP和HTTPS一樣,只不過增加了SSL
HTTP 包含如下動作:
- 瀏覽器開啟一個 TCP 連線
- 瀏覽器傳送 HTTP 請求到伺服器端
- 伺服器傳送 HTTP 迴應資訊到瀏覽器
- TCP 連線關閉
SSL 包含如下動作:
- 驗證伺服器端
- 允許客戶端和伺服器端選擇加密演算法和密碼,確保雙方都支援
- 驗證客戶端(可選)
- 使用公鑰加密技術來生成共享加密資料
- 建立一個加密的 SSL 連線
- 基於該 SSL 連線傳遞 HTTP 請求
CA證書、SSL
-
伺服器向CA機構獲取SSL證書(假設這個證書偽造不了),當瀏覽器首次請求伺服器的時候,伺服器返回證書給瀏覽器。(證書包含:公鑰+申請者與頒發者的相關資訊+簽名)
-
瀏覽器得到證書後,開始驗證證書的相關資訊,證書有效(沒過期等)。(驗證過程,比較複雜,詳見上文)。
-
驗證完證書後,如果證書有效,客戶端是生成一個隨機數,然後用證書中的公鑰進行加密,加密後,傳送給伺服器,伺服器用私鑰進行解密,得到隨機數。之後雙方便開始用該隨機數作為鑰匙,對要傳遞的資料進行加密、解密。