边缘CSP:降低延迟的同时保证安全性

安全
本文将首先介绍CSP的工作原理。我们会展示一些更有效、更动态地CSP用法,包括在服务器上进行的一些计算工作。

内容安全策略(Content Security Policy,CSP)是网络浏览器中实现的一种安全功能,可用于保护网站和Web应用程序免受各种类型的攻击,如跨站脚本攻击(XSS)和数据注入攻击。CSP可控制并限制能够在网页上加载或执行的不同类型内容的来源。这些内容类型包括:

  • 脚本
  • 样式表
  • 图片

延伸阅读,点击链接了解 Akamai API Security

本文将首先介绍CSP的工作原理。我们会展示一些更有效、更动态地CSP用法,包括在服务器上进行的一些计算工作。其实我们可以将这些计算转移到边缘,从而降低延迟并确保最佳的用户体验。我们还将探讨这种边缘计算解决方案的工作原理。

CSP的工作原理

CSP通常是通过在HTTP响应中添加Content-Security-Policy标头,从而在服务器端定义的。这种标头由Web服务器发送给请求网页的用户,其中指定了浏览器在加载和执行页面内容时应遵循的规则。

1.Content-Security-Policy标头范例

假设我们使用了Node.js中的Express,此时可以这样设置CSP标头:

const express = require('express');
const app = express();
app.get('/', (req, res) => {
 res.set('Content-Security-Policy', 'directive1 value1; directive2 value2; ...');
 res.status(200).send('hello world');
});

如果使用Python和Flask,那么所用代码如下:

app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello_world():
 response = make_response('hello world')
 response.headers['Content-Security-Policy'] = 'directive1 value1; directive2 value2; ...'
 return response

2.使用指令

每个CSP标头可以包含多个指令(directive),每个指令包含了与所提供的设置类型相关的值。这些指令定义了各种类型资源的安全规则。例如script-src指令规定了允许的样式表来源。

请看下面的CSP标头:

Content-Security-Policy: default-src 'self'; script-src 'self' https://static.example.com; style-src 'self' 'unsafe-inline';

上述标头中可以看到三个指令,每个指令都有相应的值。

  • default-src指令设置为'self',表示默认情况下,所有内容都应从与页面本身相同的源加载。
  • script-src指令允许从同一源('self')和指定的外部源(https://static.example.com)加载脚本。
  • style-src指令允许从同一源加载样式表,也允许内联样式。

可用指令的列表实际上非常详尽。其他指令还包括:

  • font-src:使用@font-face加载字体的源代码。
  • frame-src:加载到<frame>和<iframe>等元素中的嵌套浏览上下文的源代码。
  • img-src:图片和收藏夹图标的来源。

3.将CSP与HTML相结合

在服务器上设置了CSP标头后,浏览器在加载网页资源时就会执行这些规则。

在HTML源代码中,开发人员可以通过内联或引用资源(来自同一源或其他源)来添加元素(如脚本或样式表)。然后,浏览器将检查CSP标头,确保这些资源符合定义的规则。如果CSP不允许某项资源,浏览器将阻止其包含和执行。

4.每次请求中的唯一性

由于CSP标头是这样定义的,因此在对特定网页的所有请求中,它们通常都是一致的。对单个页面的每次请求的详细信息和指令,在该页面的每次后续请求中都是相同的。

这就造成了一个有趣问题:如何处理动态的内联脚本和样式?我们可能希望允许执行特定内联脚本和样式,同时又不愿意开放地包含所有内联脚本和样式权限。

这种情况下可以引入nonce值或哈希值,以确保即使脚本或样式的来源没有在CSP中明确列出,只要与CSP标头指定的nonce值或哈希值相匹配,就仍然可以执行。

每次请求时,这些nonce值或哈希值都会发生变化,因此它们是唯一的。所以它们需要在服务器上生成和管理。虽然需要在服务器上执行,但并不一定需要在网站的主服务器上执行。这就是边缘计算的用武之地。

边缘计算是什么?

边缘计算本质上是一种概念,即某些计算可以设置在网络外缘运行,在地理位置上更靠近最终用户。从本质上说,这是一种分布式计算,可以实现更接近实时的计算速度(哪怕跨跃了互联网),同时还能降低网络延迟。

利用边缘计算,我们可以将关注点转移到离最终用户更近的地方,为CSP标头生成nonce值或哈希值,从而减少等待的时间。

1.边缘计算如何让CSP受益

CSP会降低网站速度的一个重要原因是:标头中的nonce会导致缓存丢失,此时客户的浏览器需要持续访问服务器,网站才能正确生成最新标头。为了解决这个问题,我们可以在边缘实例中实现动态CSP nonce生成器。这样既能确保缓存仍然有用,又能保证安全。

这种方法的优点包括:

  • 降低延迟:边缘计算实例生成nonce并将其插入请求。这样,已插入nonce的请求将继续进入缓存,从而避免每次请求都需要访问源服务器以获取新响应的情况。
  • 分布式安全性:使用边缘计算意味着,在客户需要与系统主服务器和应用程序代码交互前,我们就拥有了额外的安全层。即使存在应用程序漏洞,计算CSP nonce的边缘计算也能提供额外的安全层,帮助我们减轻潜在的问题。
  • 易于维护:如果采用无服务器方法在边缘管理CSP标头的动态nonce,这将简化维护任务。特别是可以在不修改应用程序代码的情况下管理CSP策略。通常,我们还可以从中央控制系统管理这类变更,而无需部署任何特殊的代码。边缘计算功能还可用于多个独立应用程序,从而将关注点从为每个应用程序工作的特定团队中分离出来,并让安全专业人员确保能生成正确的nonce。

总结

是否有兴趣进一步了解边缘计算?欢迎关注Akamai官网,进一步了解Akamai的特色产品和服务,尤其是EdgeWorkers,它可以创建一种无服务器体验,完全实现我们在本文中讨论的功能,并且无需自行解决如何在网络边缘部署服务器的复杂问题。

—————————————————————————————————————————————————

如您所在的企业也想要进一步保护API安全,

点击链接 了解Akamai的解决方案

责任编辑:张燕妮
相关推荐

2013-01-11 14:00:18

云存储云计算云安全

2013-01-15 10:12:39

云存储云安全

2010-05-17 16:26:36

IIS安全

2020-08-27 19:25:01

边缘计算云计算安全

2012-05-10 09:50:53

云计算安全

2019-08-21 17:10:13

安全技术网络安全网站

2023-07-13 07:35:19

2019-10-28 13:44:10

安全边缘计算数据

2022-06-22 09:00:00

安全编程语言工具

2019-12-04 07:12:41

前端后端web安全

2011-03-31 09:40:46

2011-02-13 14:36:35

2013-02-18 16:12:55

2015-09-25 10:17:01

AWS合规性安全风险

2021-03-29 18:52:32

边缘安全零信任加密

2019-04-09 10:35:14

API数据安全性

2021-11-10 15:14:25

安全性密码网络安全

2022-03-03 09:39:29

云计算混合云安全

2009-11-30 09:41:38

2023-02-28 14:11:58

物联网边缘应用
点赞
收藏

51CTO技术栈公众号