自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Web應(yīng)用安全性: 瀏覽器是如何工作的

開發(fā) 前端
這里先解釋瀏覽器的功能以及執(zhí)行方式。由于大多數(shù)客戶將通過瀏覽器與 web 應(yīng)用程序進行交互,因此必須了解這些出色程序的基礎(chǔ)知識。

[[258761]]

 這里先解釋瀏覽器的功能以及執(zhí)行方式。由于大多數(shù)客戶將通過瀏覽器與 web 應(yīng)用程序進行交互,因此必須了解這些出色程序的基礎(chǔ)知識。

瀏覽器是一個渲染引擎,它的工作是下載一個web頁面,并以人類能夠理解的方式渲染它。

雖然這幾乎是一種過于簡單的過分簡化,但我們現(xiàn)在需要知道的全部內(nèi)容。

  •  用戶在瀏覽器欄中輸入一個地址。
  •  瀏覽器從該 URL 下載“文檔”并渲染它。

你可能習(xí)慣使用 Chrome,F(xiàn)irefox,Edge或Safari等流行的瀏覽器之一,但這并不意味著沒有不同的瀏覽器。

例如,lynx 是一種輕量級的、基于文本的瀏覽器,可以在命令行中工作。lynx 的核心原理與其他“主流”瀏覽器的原理完全相同。用戶輸入 web 地址(URL),瀏覽器獲取文檔并呈現(xiàn)它——僅有的區(qū)別是 lynx 不使用可視化渲染引擎,而是使用基于文本的界面,這使得像谷歌這樣的網(wǎng)站看起來像這樣:

我們大致了解瀏覽器的功能,但是讓我們仔細看看這些機智的應(yīng)用程序為我們所做的步驟。

瀏覽器做了什么?

長話短說,瀏覽器的工作主要包括:

  •  DNS 解析
  •  HTTP 交換
  •  渲染
  •  重復(fù)以下步驟

DNS 解析

這個過程確保一旦用戶輸入 URL,瀏覽器就知道它必須連接到哪個服務(wù)器。瀏覽器聯(lián)系 DNS 服務(wù)器,發(fā)現(xiàn)google.com 翻譯成 216.58.207.110,這是一個瀏覽器可以連接的 IP 地址。

HTTP 交換

一旦瀏覽器確定了哪個服務(wù)器將為我們的請求提供服務(wù),它將啟動與它的 TCP 連接并開始 HTTP 交換。 這只是瀏覽器與服務(wù)器通信所需內(nèi)容以及服務(wù)器回復(fù)的一種方式。

HTTP 只是用于在 Web 上進行通信協(xié)議的名稱,而瀏覽器一般通過 HTTP 與服務(wù)器進行通信。 HTTP 交換涉及客戶端(我們的瀏覽器)發(fā)送請求,服務(wù)器回復(fù)響應(yīng)。

例如,當(dāng)瀏覽器成功連接到 google.com 背后的服務(wù)器后,它將發(fā)送一個如下所示的請求: 

  1. GET / HTTP/1.1  
  2. Host: google.com  
  3. Accept: */* 

讓我們一行一行地把請求分解:

  •  GET / HTTP/1.1:在第一行中,并補充說其余請求將遵循 HTTP/1.1 協(xié)議(它也可以使用1.0或2)
  •  Host: google.com:這是 HTTP/1.1 中必須的 HTTP 報頭。因為服務(wù)器可能服務(wù)多個域(google.com, google.co.uk) 。這里的客戶端提到請求是針對特定的主機的。
  •  Accept: */*:一個可選的標(biāo)頭,其中瀏覽器告訴服務(wù)器接受任何類型的響應(yīng)。服務(wù)器可以擁有 JSON、XM L或HTML 格式的可用資源,因此它可以選擇自己喜歡的格式。

作為客戶端的瀏覽器發(fā)送請求之后,就輪到服務(wù)器進行響應(yīng)了,這是響應(yīng)的格式如下: 

  1. HTTP/1.1 200 OK  
  2. Cache-Control: private, max-age=0  
  3. Content-Type: text/html; charset=ISO-8859-1  
  4. Server: gws  
  5. X-XSS-Protection: 1; mode=block  
  6. X-Frame-Options: SAMEORIGIN  
  7. Set-Cookie: NID=1234expires=Fri, 18-Jan-2019 18:25:04 GMT; path=/; domain=.google.com; HttpOnly  
  8. <!doctype html><html">  
  9. ...  
  10. ...  
  11. </html> 

哇,有很多信息需要消化。服務(wù)器讓我們知道請求是成功的(200 OK),并向響應(yīng)中添加一些頭部信息,例如,它告知哪個服務(wù)器處理了我們的請求(Server:gws),該響應(yīng)的 X-XSS-Protection 策略是什么,等等。

現(xiàn)在,你不需要理解響應(yīng)中的每一行,在本系列后面的文章中,我們將介紹 HTTP 協(xié)議及其頭部等內(nèi)容。

現(xiàn)在,你只需要了解客戶端和服務(wù)器正在交換信息,并且它們是通過 HTTP 進行交換的。

渲染 

  1. <!doctype html><html">  
  2. ...  
  3. ...  
  4. </html> 

在響應(yīng)的主體中,服務(wù)器根據(jù) Content-Type 頭包括響應(yīng)類型來表示。 在我們的例子中,內(nèi)容類型設(shè)置為 text/ html,因此我們期待響應(yīng)中的 HTML 標(biāo)記 - 這正是我們在正文中找到的。

這才是瀏覽器真正的亮點所在。它解析 HTML,加載標(biāo)記中包含的額外資源(例如,可能需要獲取JavaScript文件或CSS文檔),并盡快將它們呈現(xiàn)給用戶。

最終的結(jié)果是普通人能夠理解的:

如果想要更詳細地了解當(dāng)我們在瀏覽器地址欄中按回車鍵時會發(fā)生什么,建議閱讀“What happens when…”,這是一個非常精細的嘗試來解釋該過程背后的機制。

由于這是一個關(guān)注安全性的系列文章,從剛剛了解到的內(nèi)容可以提到提示:攻擊者可以輕松地利用 HTTP 交換和渲染部分中的漏洞謀生。漏洞和惡意用戶也潛伏在其他地方,但是這些級別上更好的安全方法已經(jīng)允許你在改進安全性方面取得進展。

供應(yīng)商

4 個非常流行的瀏覽器屬于不同的公司:

  •  谷歌的 Chrome
  •  Mozilla 的火狐
  •  蘋果的 Safari
  •  微軟的 Edge

除了為了增加市場滲透率而相互競爭之外,供應(yīng)商也為了提高 web 標(biāo)準(zhǔn)而相互合作,這是對瀏覽器的一種非常低的要求。

W3C是標(biāo)準(zhǔn)開發(fā)的主體,但是瀏覽器開發(fā)自己的特性并最終成為 web 標(biāo)準(zhǔn)的情況并不少見,安全性也不例外。

例如,Chrome 51 引入了 SameSite cookie,該功能允許 Web 應(yīng)用程序擺脫稱為 CSRF 的特定類型的漏洞(稍后將詳細介紹)。其他供應(yīng)商認為這是一個好主意,并紛紛效仿,導(dǎo)致 SameSite 成為 web 標(biāo)準(zhǔn):到目前為止,Safari 是僅有的沒有 SameSite cookie 支持的主流瀏覽器。

這告訴我們兩件事:

  •  Safari似乎并不關(guān)心用戶的安全性(開玩笑:Safari 12中將提供SameSite cookie,這可能在你閱讀本文時已經(jīng)發(fā)布)
  •  修補一個瀏覽器上的漏洞并不意味著所有用戶都是安全的

第一點是對 Safari 的一次嘗試(正如我提到的,開玩笑的!),而第二點非常重要。在開發(fā)web應(yīng)用程序時,我們不僅需要確保它們在不同的瀏覽器中看起來是相同的,還需要確保我們的用戶在不同的平臺上受到相同的保護。

你的網(wǎng)絡(luò)安全策略應(yīng)根據(jù)瀏覽器供應(yīng)商允許我們執(zhí)行的操作而有所不同。 如今,大多數(shù)瀏覽器都支持相同的功能集,并且很少偏離其常見的路線圖,但是上面的實例仍然會發(fā)生,這是我們在定義安全策略時需要考慮的事情。

在我們的例子中,如果我們決定只通過 SameSite cookie 來減輕 CSRF 攻擊,那么我們應(yīng)該意識到我們正在將 Safari 用戶置于危險之中。我們的用戶也應(yīng)該知道這一點。

然后,你應(yīng)該記住,你可以決定是否支持瀏覽器版本:支持每一個瀏覽器版本將是不切實際的(想想 Internet Explorer 6)。雖然確保最近幾個版本的主流瀏覽器的支持通常是一個好的決定,但是如果你不打算在特定的平臺上提供保護,一般建議讓你的用戶知道。

專業(yè)提示:你不應(yīng)該鼓勵你的用戶使用過時的瀏覽器,或積極支持他們。盡管你可能已經(jīng)采取了所有必要的預(yù)防措施,但是其他web開發(fā)人員可能沒有。鼓勵用戶使用主流瀏覽器支持的新版本。

供應(yīng)商還是標(biāo)準(zhǔn)bug?

普通用戶通過第三方客戶端(瀏覽器)訪問我們的應(yīng)用程序這一事實增加了另一層次的間接性:瀏覽器本身可能存在安全漏洞。‘

供應(yīng)商通常會向能夠發(fā)現(xiàn)瀏覽器自身漏洞的安全研究人員提供獎勵(即 bug獎金)。這些bug與你的實現(xiàn)無關(guān),而是與瀏覽器本身處理安全性的方式有關(guān)。

例如,Chrome 獎勵計劃可讓安全工程師與 Chrome 安全團隊聯(lián)系,報告他們發(fā)現(xiàn)的漏洞。 如果確認了這些漏洞,則會發(fā)布補丁,通常會向公眾發(fā)布安全建議通知,研究人員會從該計劃中獲得(通常是財務(wù)上的)獎勵。

像谷歌這樣的公司在他們的Bug賞金項目中投入了相對較多的資金,這使得他們能夠通過承諾在發(fā)現(xiàn)應(yīng)用程序的任何問題時獲得經(jīng)濟利益來吸引研究人員。

在一個漏洞賞金計劃中,每個人都是贏家:供應(yīng)商設(shè)法提高其軟件的安全能力,研究人員也因此獲得報酬。我們將在后面討論這些程序,因為我相信Bug賞金計劃應(yīng)該在安全領(lǐng)域有自己的一節(jié)。

Jake Archibald 是谷歌的一名開發(fā)人員,他最近發(fā)現(xiàn)了一個影響多個瀏覽器的漏洞。他在一篇有趣的博客文章中記錄了他的努力,他如何接觸不同的供應(yīng)商,以及他們的反應(yīng),建議你閱讀 這篇文章。

開發(fā)人員的瀏覽器

到目前為止,我們應(yīng)該理解一個非常簡單但相當(dāng)重要的概念:瀏覽器只是為普通網(wǎng)絡(luò)沖浪者構(gòu)建的 HTTP 客戶端。

它們肯定比平臺的純HTTP客戶端更強大(例如,考慮NodeJS的require(‘HTTP’)),但歸根結(jié)底,它們“只是”更簡單的 HTTP客戶端的自然演化。

作為開發(fā)人員,我們選擇的HTTP客戶機可能是 Daniel Stenberg 的 cURL,他是 web 開發(fā)人員每天使用的十分流行的軟件程序之一。它允許我們通過從命令行發(fā)送 HTTP 請求來實時執(zhí)行 HTTP 交換: 

  1. $ curl -I localhost:8080  
  2. HTTP/1.1 200 OK  
  3. server: ecstatic-2.2.1  
  4. Content-Type: text/html  
  5. etag: "23724049-4096-"2018-07-20T11:20:35.526Z""  
  6. last-modified: Fri, 20 Jul 2018 11:20:35 GMT  
  7. cache-control: max-age=3600  
  8. Date: Fri, 20 Jul 2018 11:21:02 GMT  
  9. Connection: keep-alive 

在上面的示例中,我們在 localhost:8080/ 上請求了文檔,本地服務(wù)器成功響應(yīng)。

在這里,我們沒有將響應(yīng)的主體顯示在命令行,而是使用了 -I 標(biāo)志,它告訴 cURL 我們只對響應(yīng)頭感興趣。更進一步,我們可以指示 cURL 顯示更多的信息,包括它執(zhí)行的實際請求,以便更好地查看整個HTTP交換。需要使用的選項是-v(詳細): 

  1. $ curl -I -v localhost:8080  
  2. * Rebuilt URL to: localhost:8080/  
  3. *   Trying 127.0.0.1...  
  4. * Connected to localhost (127.0.0.1) port 8080 (#0)  
  5. > HEAD / HTTP/1.1  
  6. > Host: localhost:8080  
  7. > User-Agent: curl/7.47.0  
  8. > Accept: */*  
  9. >  
  10. < HTTP/1.1 200 OK  
  11. HTTP/1.1 200 OK  
  12. < server: ecstatic-2.2.1  
  13. server: ecstatic-2.2.1  
  14. < Content-Type: text/html  
  15. Content-Type: text/html  
  16. < etag: "23724049-4096-"2018-07-20T11:20:35.526Z""  
  17. etag: "23724049-4096-"2018-07-20T11:20:35.526Z""  
  18. < last-modified: Fri, 20 Jul 2018 11:20:35 GMT  
  19. last-modified: Fri, 20 Jul 2018 11:20:35 GMT  
  20. < cache-control: max-age=3600  
  21. cache-control: max-age=3600  
  22. < Date: Fri, 20 Jul 2018 11:25:55 GMT  
  23. Date: Fri, 20 Jul 2018 11:25:55 GMT  
  24. < Connection: keep-alive  
  25. Connection: keep-alive  
  26. <  
  27. * Connection #0 to host localhost left intact 

主流瀏覽器通過它們的 DevTools 可以獲得幾乎相同的信息。

正如我們所見,瀏覽器只不過是精心設(shè)計的HTTP客戶端。 當(dāng)然,他們添加了大量的功能(想到憑據(jù)管理,書簽,歷史等),但事實是,它們是作為人類的 HTTP 客戶端而誕生的。 這很重要,因為在大多數(shù)情況下,不需要使用瀏覽器來測試Web應(yīng)用程序的安全性,因為你可以簡單的通過 curl 命令來查看響應(yīng)信息。

進入 HTTP 協(xié)議

正如我們所提到的,HTTP交換和渲染階段是我們主要要涉及的階段,因為它們?yōu)閻阂庥脩籼峁┝舜髷?shù)量的攻擊媒介。

在下一篇文章中,我們將深入研究HTTP協(xié)議,并嘗試了解為了保護HTTP交換,我們應(yīng)該采取哪些措施。

 

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2009-04-24 09:08:24

2014-01-02 13:15:21

2011-09-06 10:00:04

2011-05-23 13:32:46

2011-02-13 14:36:35

2013-02-18 16:12:55

2019-03-12 18:00:33

httpWeb安全Javascript

2013-04-23 10:27:40

Chrome瀏覽器

2015-11-12 10:23:11

Edge瀏覽器Windows 10

2018-12-03 14:58:21

Linux網(wǎng)絡(luò)瀏覽器安全性

2019-12-02 13:46:35

瀏覽器前端開發(fā)

2024-04-12 08:00:00

2013-11-22 09:58:36

2021-07-08 07:01:53

瀏覽器安全前端

2021-11-03 06:57:41

瀏覽器Jsonp安全

2018-08-30 08:47:59

瀏覽器web服務(wù)器通信

2023-06-04 19:11:22

瀏覽器Edge

2009-03-11 08:52:33

2022-06-22 09:00:00

安全編程語言工具

2009-06-04 09:20:45

點贊
收藏

51CTO技術(shù)棧公眾號