Home Blogs 使用Layer0的EdgeJS配置自定义安全标头
Applications

使用Layer0的EdgeJS配置自定义安全标头

About The Author

Outline

实施安全标头变得非常重要,因为漏洞和数据窃取的数量每天都在迅速增加。 安全标头提供了一个易于实施的解决方案部分:简单地传递特定的HTTP标头,以保护您的网站免受常见的攻击,如XSS,代码注入,点击劫持等

什么是安全标头?

Web应用程序可以向浏览器发送特殊命令,以保护网站免受漏洞或客户端漏洞(称为”安全标头”)的侵害。

当用户在其浏览器中访问网站时,服务器将使用HTTP响应标头进行响应。 这些标头由元数据组成,与客户端和服务器共享信息。 此共享信息定义了浏览器应如何与网站交互。 安全标头可针对各种Web应用程序漏洞和威胁提供强大的保护。

本博客将细分以下重要的安全标题:

  • 内容安全策略(CSP)
  • X-Content-Type-Options
  • X-Frame-Options (X帧选项)
  • 跨源服务器资源政策(CORP)
  • 跨来源嵌入政策(COEP)
  • 跨源代码开放政策(COOP)
  • 引用策略
  • 权限策略
  • HTTP严格传输安全(HSTS)

安全标头的重要性

HTTP安全标头是网站安全的基本组成部分;但是, 在排名前100万的网站中,只有1.6%的网站 实施了内容安全策略(CSP),只有2%的网站实施了仅CSP报告。

令人震惊,对吧?! 缺少CSP HTTP标头会破坏针对跨站点脚本(XSS)和其他客户端注入攻击的防御机制。 英国航空泄露 是其中一个事件,它说明了由于缺乏客户端安全性,姓名,街道地址,电子邮件地址,信用卡号, 暴露了38万名客户的过期日期和信用卡安全代码,这些代码在15天内未被检测到。

使用Layer0的EdgeJS增强安全性

使用Layer0的部署平台,将为每个部署链接自动配置TLS等内容,因此开发人员可以在默认情况下安全地交付。 在本博客中,我们将仔细研究重要的安全标头和一个示例,以显示您可以如何快速使用Layer0上的Routes config来保护网站

Edgio安全标头入门

内容安全策略(CSP)

CSP如何防止从不允许的源服务器加载资源

Content-Security-Policy通过限制从特定允许的源站加载(和执行)脚本,样式,图像,字体和媒体,提供了一个额外的层来防止 跨站点脚本(XSS) 攻击。 无论您的后端有多安全,如果恶意攻击者可以攻击在浏览器中而不是在服务器上运行的代码,用户会话数据都会受到威胁,机密信息也会暴露出来。 其中一个例子(例如英国航空数据泄露)是对Ticketmaster支付模块的MageCart攻击。 Ticketmaster违规 导致40,000名信用卡失窃受害者,并在被抓获前保持活跃5个月! 只需在浏览器中注入表单skimming脚本即可

const { Router }= require(‘@layer0/core/router ‘) const ContentSecurityPolicy =`default-src ‘elf’; script-src ‘self”unsafe-eval”unsafe-inline’*。layer0co; style-src ‘elf’unsafe-inline’*.googleapis.com ; img-src * blob: data:; media-src *无; connect-src *.gstatic.com ` New Router().get(“/:route”,({setResponseHeader })={> setResponseHeader (“Content-Security-Policy”, ContentSecurityPolicy.replace (/\n/g,”))})

内容安全策略使您能够:

  1. 克服XSS (跨站点脚本)攻击
  2. 防止Clickjacking
  3. 报告违反CSP规则的情况

X-Content-Type-Options

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

X-Content-Type-Options标头指示应严格遵循Content-Type标头中指定的MIME (多用途因特网邮件扩展名,文件格式的标识符)类型。 使用 MIME类型嗅探,图像上载等操作可以运行可能是恶意的可执行文件,其中X-Content-Type-Options标头发挥作用。

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

X-Frame-Options (X帧选项)

X-Frame-Options标头

X-Frame-Options标头指示是否应允许浏览器在框架,iframe,embed或要避免的对象标记中呈现页面 点击劫持 攻击。 设置为拒绝或SAMEORIGIN可确保其内容不会分别嵌入到其他站点或仅嵌入到具有相同来源的站点中。

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

X-Frame-Options使您能够:

  1. 防止Clickjacking攻击
  2. 指示是否应允许浏览器在中呈现页面 <框架>, <iFrame>, <嵌入> 或 <对象>

跨源服务器资源政策(CORP)

CORP允许服务器针对请求的资源(例如API响应)的某些跨源或跨站点嵌入提供保护。 它还可以防止像Spectre这样的投机性边信道攻击

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

跨源服务器资源策略是一个可选入的响应标头,它可以保护任何资源;浏览器不需要嗅探MIME类型。 MDN文档

跨来源嵌入政策(COEP)

COEP标头可防止加载未被授予权限的跨来源资源(通过 CORS或CORP )。 使用’require-corp’强制执行标头,而使用’unsafe-none’允许提取跨源代码文档。

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

跨源代码开放政策(COOP)

实施COOP标题可确保顶级文档的浏览上下文组不会在跨源文档之间共享。 虽然”相同来源”中断了需要跨来源窗口交互(如OAuth和Payment)的集成,但”相同来源-允许-弹出窗口”旨在仅与来自SAMEORIGIN的弹出窗口共享上下文。

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

引用者策略

当用户从一个站点(源站)导航(单击链接)到另一个站点(目标站)时,后者会收到有关用户来源的信息。 Referrer-Policy标头控制此信息中有多少可供目标使用。 有关Referrer-Policy的所有指令,请参阅 Referrer-Policy—HTTP | MDN (mozilla.org)

const { Router }= require(“@layer0/core/router”) module.exports = new Router().get(“/”,({setResponseHeader })={> setResponseHeader (“Referrer-Policy”,”origin-when cross-origin”)})

权限策略

一种实验性HTTP标头,提供允许/拒绝其自身框架以及文档中任何iframe中的浏览器功能的能力。 有关Referrer-Policy的所有指令,请参阅 Feature-Policy—HTTP | MDN (mozilla.org)

const { Router }= require(“@layer0/core/router”) module.exports = new Router().get(“/”,({setResponseHeader })={ setResponseHeader (“Permissions-Policy”,”Cameras=(), microconception=(), > geolocation=()”);})

HTTP严格传输安全(HSTS)

HSTS严格传输安全标头

HTTP Strict-Transport-Security (HSTS)通知浏览器仅使用HTTPS而不是HTTP协议加载网站。

const { Router }= 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,您可以将安全标头添加到任何网站,而不受所使用的框架的影响。 以下内容旨在通过Layer0在Sapper构建的网站中实现相关的安全标头

示例: https://rishi-raj-jain-security-headers-example-default.layer0-limelight.link
GitHub: Rishi-raj-jain/security-headers-example
报告: 安全标头报告链接

讨论

继续并添加相关的安全标头,以保护您的Web应用程序! 有了Layer0,您可以做更多的事情,秘密,缓存中毒和启用基本身份验证在 Edgio文档-安全.

Tags

Just For You