Home Blogs 使用Layer0的EdgeJS配置自定義安全標頭
Applications

使用Layer0的EdgeJS配置自定義安全標頭

About The Author

Outline

由於漏洞和數據竊取的數量每天都在迅速增加,因此實施安全標頭變得非常重要。 安全標頭提供了一個易於實施的解決方案部分:只需傳遞特定的HTTP標頭即可保護您的網站免受常見的攻擊,如XSS,代碼注入,點擊劫持等

什麼是安全標頭?

Web應用程式可以向瀏覽器發送特殊命令,以保護網站免受漏洞或客戶端漏洞的侵害,稱爲安全標頭。

當用戶在瀏覽器中訪問某個網站時,伺服器會響應HTTP響應標頭。 這些標頭由元數據組成,與客戶端和伺服器共享資訊。 此共享資訊定義了瀏覽器應如何與網站交互。 安全標頭可提供強大的保護,抵禦各種Web應用程式漏洞和威脅。

此部落格將細分以下重要的安全標頭:

  • 內容安全性原則(CSP)
  • X-Content-Type-Options
  • X-Frame選項
  • 跨源資源策略(公司)
  • 跨源嵌入器策略(COEP)
  • 跨源開啓器策略(COOP)
  • 推薦者政策
  • 權限策略
  • HTTP嚴格傳輸安全性(HSTS)

安全標頭的重要性

HTTP安全標頭是網站安全的基本部分;但是,在前100萬個網站中,只有 1.6%的網 站實施了內容安全策略(CSP),僅有0.2%的網站實施了CSP報告。

太震驚了,對吧?! 由於缺少CSP HTTP標頭,因此無法防禦跨站點腳本(XSS)和其他客戶端注入攻擊。 英國航空數據泄露 是一個事件,它說明了客戶端安全性,姓名,街道地址,電子郵件地址,信用卡號, 38萬名客戶的到期日期和信用卡安全代碼已暴露,15天內未被檢測到。

使用Layer0的EdgeJS添加安全性

使用Layer0的部署平臺,每個部署鏈路都會自動配置TLS之類的功能,因此開發人員可以在預設情況下安全地發貨。 在本部落格中,我們仔細查看重要的安全標頭和示例,以顯示如何快速使用Layer0上的路由配置來保護網站。

使用Edgio開始使用 安全標頭

內容安全性原則(CSP)

CSP如何防止載入不允許來源的資源

Content-Security-Policy通過限制腳本,樣式,圖像,字體和媒體從特定允許的來源載入(和執行)來防止 跨站點腳本(XSS) 攻擊。 無論後端的安全性如何,如果惡意攻擊者攻擊在瀏覽器而不是伺服器上執行的代碼,用戶會話數據就會受到威脅,機密資訊也會被暴露。 衆多示例之一(如英國航空數據泄露)就是Ticketmaster支付模塊上的MageCart攻擊。 Ticketmaster漏洞 導致40,000名信用卡盜竊受害者,並在被捕前保持活躍5個月! 只需在瀏覽器中注入表單截取腳本即可完成所有 操作。

const {路由器}= require(‘@layer0/core/router ‘) const ContentSecurityPolicy =`default-src ‘self’;script-src ‘self”’safe-eval””safe-inline”*.layer0.co; style-src ‘self’self’sque-inline”*blob:.googleapis.com;img-blob:.gstatic.com ` bloblob: done’se-connect; New Router().get(“/:route”),({ setResponseHeader })=> { setResponseHeader (“Content-Security-Policy”, ContentSecurityPolicy.Replace(/\n/g,””)})

內容安全策略使您能夠:

  1. 克服XSS (跨站點腳本)攻擊
  2. 防止點擊
  3. 向CSP規則報告違規

X-Content-Type-Options

如何配置X-Content-Type-Options防止MIME-Type嗅探

X-Content-Type-Options標頭指示內容類型標頭中指定的MIME (多用途Internet郵件擴展,文件格式的標識符)類型應嚴格遵循。 利用 MIME類型嗅探,圖像上傳等操作可以執行惡意的可執行文件,其中X-Content-Type-Options標頭可以起作用。

const {路由器}= require(‘@layer0/core/router ‘) new Router() .get(“/:route”,({ setResponseHeader })={ setResponseHeader> (“X-Content-Type-Options”,”nossniff”)})

X-Frame選項

X-Frame選項標題

X-Frame選項標題指示是否允許瀏覽器以框架,iframe,embed或object標記呈現頁面以避免 點擊劫持 攻擊。 無論設定爲拒絕還是SAMEORIGIN,都可以確保其內容不會嵌入到其他網站中,或者只嵌入到具有相同來源的網站中。

const {路由器}= require(‘@layer0/core/router ‘) new Router() .get(“/:route”,({ setResponseHeader })={ setResponseHeader (“X-Frame-Options”,”SAMEORIGIN”)> })

X-Frame選項使您能夠:

  1. 防止點擊攻擊
  2. 指示是否應允許瀏覽器在中呈現頁面 <框架>, <iFrame>, <嵌入> 或 <對象>

跨源資源策略(公司)

Corp允許伺服器防止特定的跨源或跨站點嵌入所請求的資源(例如API響應)。 它還可以防止像Spectre這樣的投機性邊信道攻擊

const {路由器}= require(‘@layer0/core/router ‘) new Router() .get(“/:route”,({ setResponseHeader })=> { setResponseHeader(“Cross-origine-Resource-Policy”,”sate-origin”)})

跨源資源策略是一個可保護任何資源的選擇加入響應標頭;瀏覽器不需要嗅探MIME類型。 — MDN文檔

跨源嵌入器策略(COEP)

COEP標頭可防止載入未被授予權限的跨源資源(通過 CORSCORP)。 使用‘require-corp’來強制標頭,而使用‘不安全-none’來允許提取跨源文檔。

const {路由器}= require(‘@layer0/core/router ‘) new Router() .get(“/:route”,({ setResponseHeader })={ setResponseHeader(“Cross-origin-Embedder-Policy”,”require-corp”)> })

跨源開啓器策略(COOP)

強制使用COOP標頭可確保頂層文檔的瀏覽上下文組不會在跨源文檔之間共享。 ‘s‘名稱-來源’中斷了需要交叉來源窗口交互(如OAuth和Payment)的集成,而‘s‘名稱-來源-允許-彈出窗口’的目的是僅與SAMEORIGIN的彈出窗口共享上下文。

const {路由器}= require(‘@layer0/core/router ‘) new Router() .get(“/:route”,({ setResponseHeader })=> { setResponseHeader(“Cross-origin-opener-Policy”,”samate-origin-allow-popups”)})

推薦人政策

當用戶從一個站點(源站)導航(單擊鏈接)到另一個站點(目標)時,後者將接收有關用戶來源的資訊。 Referrer-Policy標頭控制目的地可以使用的資訊量。 有關Referrer-Policy的所有指令,請參閱 Referrer-Policy—HTTP | MDN (mozilla.org)

const {路由器}= require(“@layer0/core/router “) modulation.exports= new Router().get(“/”,({ setResponseHeader })={ setResponseHeader> (“referer-Policy”,”origin-when-cross-origin”)})

權限策略

一個實驗性的HTTP標頭,提供允許/拒絕其自身框架以及文檔中任何iframe中的瀏覽器功能的功能。 有關Referrer-Policy的所有指令,請參閱 Feature-Policy—HTTP | MDN (mozilla.org)

const {路由器}= require(“@layer0/core/router “) modulation.exports= new Router().get(“/”,({ setResponseHeader })={ setResponseHeader (“權限策略”,”camera=(),麥克風=(),geolocation=()”);})>

HTTP嚴格傳輸安全性(HSTS)

HSTS嚴格傳輸安全標頭

HTTP Strict-Transport-Security (HSTS)通知瀏覽器僅使用HTTPS而不是使用HTTP協議載入網站。

const {路由器}= require(‘@layer0/core/router ‘) new Router() .get(“/:route”,({ setResponseHeader })={ setResponseHeader> (“strict-Transport-Security”,”max-age=31536000; includeSubDomains”)})

HSTS使您能夠:

  1. 防範HTTP降級攻擊(SSL剝離攻擊)
  2. 預設情況下,混合內容防禦會切換到HTTPS

一個例子

使用Layer0,實現安全標頭比以往任何時候都更容易。 通過使用Layer0的EdgeJS,您可以將安全標頭添加到任何網站,而不依賴於正在使用的框架。 以下內容旨在在通過Sapper via Layer0構建的網站中實現相關的安全標頭。

示例 :https://rishi-raj-jain-security-headers-example-default.layer0-limelight.link
GitHub: Rishi-Raj-jain/security-headers-example
報告: 安全標頭報告鏈接

討論

請繼續添加相關的安全標頭以保護您的Web應用程式! 使用Layer0,您可以在Edgio Documentation—Security (安全性)上執行更多操作,包括機密,暫存中毒和啓用基本身份驗證