所有文章 > 技术杂货铺 > 什么是 Helmet 内容安全策略 (CSP),你是否需要它?
什么是 Helmet 内容安全策略 (CSP),你是否需要它?

什么是 Helmet 内容安全策略 (CSP),你是否需要它?

随着针对网站和 Web 应用程序的网络攻击前所未有地增加,精明的开发人员和网站管理员使用内容安全策略 (CSP) 来帮助防止代码注入和跨站脚本攻击 (XSS),这些攻击利用了 Web 应用程序代码中的漏洞。但有时,标准 CSP 的安全性还不够。就像骑摩托车一样,戴头盔会更安全。

最近的一项研究表明,XSS 攻击现在占据了 Web 应用程序中一半的高风险发现。这些攻击在网站上执行恶意代码或窃取敏感信息。脚本、样式表和图形只是一些可以被利用为访问网页源信息以实现这些攻击的例子。

幸运的是,CSP 头可以被修改,以启用或禁止特定类别的外部生成的信息。Web 设计人员可以通过使用 CSP 创建一个策略来限制允许加载到页面上的内容类型,从而降低遭受破坏性攻击的可能性。

为了防止这些攻击并保护网站和应用程序,任何管理敏感数据(如用户密码或支付信息)的 Web 应用程序必须拥有 CSP 或等效的漏洞管理程序。通过禁止在页面上加载和使用不合适的内容,Web 应用程序可以得到进一步保护。Web 开发人员可以使用 CSP 来确保在线程序对用户的安全,同时降低安全漏洞的可能性。

比标准 CSP 更安全的选择是 Helmet 内容安全策略(即 helmet.contentSecurityPolicy()),它是一个强大的选项,用于保护 HTTP 头。本文将探讨 Helmet CSP,为什么你应该使用它,以及如何设置它。

什么是 Helmet.js

什么是Helmet.js?

一个名为 Helmet.js 的实用 Node.js 包能够帮助你保护由 Express 应用返回的 HTTP 头。Express 是一个使用 Node.js 进行 HTTP 请求和响应管理的框架。这款包允许你构建中间件函数和路由,来执行诸如处理错误、验证数据和解析请求体等多种活动。

Express 是一个 Node.js 框架,借助其丰富的功能和工具,使构建可靠且可扩展的在线应用和 API 变得简单。

尽管 HTTP 头是 HTTP 协议的重要特性,但它们通常对终端用户是不可见的。HTTP 头提供了关于 HTTP 请求或响应的重要元数据,使客户端(浏览器)和服务器能够在一次事务中传递更多数据。

什么是头盔内容安全政策

Helmet.js 提供了几种中间件功能,可以用来在 HTTP 响应中设置与安全相关的头,包括 X-XSS-Protection、Strict-Transport-Security、Strict-Transport-Security 和内容安全策略 (CSP)。

通过使用 Helmet,开发人员可以增强其 Web 应用程序的安全性,防止各种攻击,包括代码注入、点击劫持和跨站脚本攻击 (XSS)。

开发人员可以通过使用 Helmet 的中间件服务设计 HTTP 头,以减少其 Web 应用程序中出现安全漏洞的可能性。

内容安全策略 (CSP) 是 Helmet 的核心功能之一,它通过定义允许哪些来源加载网页资源,帮助防止 XSS 和其他攻击。通过更改 CSP 头,可以接受或阻止的外部内容类型包括脚本、样式表和图片等。

什么是 Helmet 内容安全策略 (CSP)?

好的,是的,我们知道 Node.js 不是英国摩托车,但就像你应该戴上 Norton Commando 头盔一样,你应该使用 Helmet.js 来保护你的 Node.js 免受潜在的网络攻击。著名的 Node.js 软件包 Helmet.js 可以通过监控、管理和控制 HTTP 标头来保护你的互联网应用程序。

内容安全策略 (CSP) 是 Helmet.js 的核心功能之一,它可以通过定义哪些来源可以将资源加载到您的网页上来帮助防止跨站点脚本 (XSS) 和其他攻击。脚本、样式表和图片是可以通过更改其 CSP 标头来接受或阻止的外部内容类型的一些示例。 

开发人员可以利用Helmet 的 CSP 功能大幅降低在线应用程序出现安全问题的可能性,并增强其对有害攻击的抵抗力。

为什么要使用 Helmet.js 保护 HTTP 标头?

Helmet.js HTTP 标头安全性至关重要,原因如下:

首先,代码注入、点击劫持和跨站点脚本只是 Helmet.js 可以阻止的几种 Web 应用程序攻击

为了帮助阻止这些攻击,Helmet 提供了可以设置 HTTP 标头的中间件功能,如 X-XSS-Protection、Strict-Transport-Security (HSTS) 和 X-Content-Type-Options。

其次,使用 Helmet.js 保护 HTTP 标头有助于提高在线应用程序的安全性。通过安全地定义 HTTP 标头,开发人员可以帮助防止未经授权访问敏感数据,例如财务数据和用户个人身份信息 (PII)。

第三,Helmet.js 还通过优化 HTTP 标头来加速 Web 应用程序。开发人员可以通过使用cache-control和ETag等 HTTP 标头减少网站部署的服务器查询数量,从而加快页面加载时间并改善用户体验。

如何设置头盔内容安全策略

第四,通过保护 HTTP 标头,Helmet.js可以帮助在线应用程序遵守各种安全标准和法律,例如支付卡行业数据安全标准(PCI DSS)。任何管理敏感数据(例如信用卡信息)的应用程序都必须遵守这些规范。

最后,为了提高在线服务的安全性、有效性和合规性,需要使用 Helmet.js 进行 HTTP 标头安全保护。开发人员可以使用 Helmet 的中间件技术提供适当的 HTTP 标头,从而帮助避免攻击、加强应用程序的安全态势并遵守重要的安全标准和法律。

如何设置 Helmet 内容安全策略

使用 Helmet 设置内容安全策略 (CSP) 是保护 Web 应用程序的关键步骤。以下是设置 Helmet 内容安全策略的步骤:

使用 npm 或 yarn 安装 Helmet 包,它们是 JavaScript 和 Node.js 开发人员常用的两个包管理器。它们便于管理项目的依赖项,依赖项是项目正常运行所需的任何代码或库。

npm install helmet

yarn add helmet

将 helmet 包导入到你的 Node.js 应用程序中:

const helmet = require('helmet');

使用 helmet.contentSecurityPolicy() 中间件函数来设置 CSP 策略:

app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "'unsafe-inline'", 'example.com'],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", 'example.com'],
connectSrc: ["'self'"],
fontSrc: ["'self'"],
objectSrc: ["'none'"],
mediaSrc: ["'self'"]
}
}));

在上述示例中,我们设置了以下指令:

  • defaultSrc: 将所有类型资源的默认来源设置为 'self'
  • scriptSrc: 将 JavaScript 代码的允许来源设置为 'self''unsafe-inline'(允许内联脚本)和 example.com
  • styleSrc: 将 CSS 样式的允许来源设置为 'self''unsafe-inline'(允许内联样式)。
  • imgSrc: 将图片的允许来源设置为 'self'example.com
  • connectSrc: 将网络连接的允许来源设置为 'self'
  • fontSrc: 将字体的允许来源设置为 'self'
  • objectSrc: 将对象(如 Flash 和 Java applets)的允许来源设置为 'none'(禁止任何对象)。
  • mediaSrc: 将媒体(如音频和视频)的允许来源设置为 'self'

在下面的示例中,我们将 default-src 指令设置为 'self',并在 HTTP 头中设置。你也可以在 HTTP 头中设置其他指令,但请确保它们与 helmet.contentSecurityPolicy() 中间件的指令对象匹配。

app.use((req, res, next) => {
res.setHeader('Content-Security-Policy', "default-src 'self';");
next();
});
头盔内容安全政策

好啦,戴上头盔,我们走吧!

总而言之,Helmet.js 是一个 Node.js 包,它提供中间件功能来保护 HTTP 响应中的 HTTP 标头,包括 X-XSS-Protection、Strict-Transport-Security 和内容安全策略 (CSP)。CSP 可以通过指定允许哪些外部内容源将资源加载到网页上来防止代码注入和跨站点脚本 (XSS) 攻击。 

利用 Helmet 的 CSP 功能,开发人员可以显著降低其在线应用程序出现安全问题的可能性,并提高其对有害攻击的抵抗力。使用Helmet.js 保护 HTTP 标头还可以提高在线应用程序的安全性,优化 HTTP 标头,并确保符合各种安全标准和法律。

文章来源:What is a Helmet Content Security Policy, and Do You Need It?

#你可能也喜欢这些API文章!