在应用程序中添加HTTP响应头可以提高Web应用程序的安全性。本文介绍如何通过定义EnvoyFilter添加HTTP响应头。
前提条件
- 已创建一个ASM实例,并已将ACK集群添加到ASM实例中。具体操作,请参见创建ASM实例和添加集群到ASM实例。
- 通过kubectl连接ASM实例。
- 部署应用到ASM实例。
- 定义Istio资源。
背景信息
OWASP提供了最佳实践指南和编程框架,描述了如何使用安全响应头保护应用程序的安全。HTTP响应头的基准配置如下:
HTTP响应头 | 默认值 | 描述 |
---|---|---|
Content-Security-Policy | frame-ancestors none; | 防止其他网站进行Clickjacking攻击。 |
X-XSS-Protection | 1;mode=block | 激活浏览器的XSS过滤器(如果可用),检测到XSS时阻止渲染。 |
X-Content-Type-Options | Nosniff | 禁用浏览器的内容嗅探。 |
Referrer-Policy | no-referrer | 禁用自动发送引荐来源。 |
X-Download-Options | noopen | 禁用旧版本IE中的自动打开下载功能。 |
X-DNS-Prefetch-Control | off | 禁用对页面上的外部链接的推测性DNS解析。 |
Server | envoy | 由Istio的入口网关自动设置。 |
X-Powered-by | 无默认值 | 去掉该值来隐藏潜在易受攻击的应用程序服务器的名称和版本。 |
Feature-Policy |
camera ‘none’; microphone ‘none’; geolocation ‘none’; encrypted-media ‘none’; payment ‘none’; speaker ‘none’; usb ‘none’; |
控制可以在浏览器中使用的功能和API。 |
以Bookinfo应用程序为例(详情请参见部署应用到ASM实例),通过Curl命令可以看到应用程序的HTTP响应头信息如下。
curl -I http://{入口网关服务的IP地址}/productpage
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
content-length: 5183
server: istio-envoy
date: Tue, 28 Jan 2020 08:15:21 GMT
x-envoy-upstream-service-time: 28
可以看到,在默认情况下,示例应用程序的入口首页响应并没有包含上述表格中安全相关的HTTP响应头。通过Istio EnvoyFilter可以快速添加安全相关的HTTP响应头。
操作步骤
FAQ
为什么无法访问带有特殊字符的URL?
以特殊字符Á为例,特殊字符Á的编码格式采用Unicode,而不是ASCII。因此请求的URL中带有特殊字符,不符合URL规范。更多信息,请参见Envoy cannot parse non-alphanumeric characters if not urlencoded。