AddHeader
插件通过在应用程序中添加HTTP响应头来提高Web应用程序的安全性。插件默认提供了HTTP响应头的基准配置,您也可以在填充模板参数时添加自定义响应头,或覆盖默认提供的响应头。
本插件必须生效于ASM网关服务。
前提条件
已部署入口网关。具体操作,请参见创建入口网关。
已在数据面集群部署sleep服务和httpbin服务。具体操作,请参见部署httpbin应用。
配置字段
名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
headers | string map | 可选 | {} | 配置自定义的响应头配置。 |
配置示例
配置响应头基准配置以保护应用程序安全
OWASP提供了最佳实践指南和编程框架,描述了如何使用安全响应头保护应用程序的安全。有关HTTP响应头的基准配置,请参见在ASM中通过EnvoyFilter添加HTTP响应头。
AddHeader
插件默认向网关的响应头中插入HTTP响应头基准配置,以保护应用程序的安全。无需配置任何参数,选择插件的生效范围为网关生效,并选择生效至网关ingressgateway
。
执行以下命令,进行测试。
curl -I {网关ip地址}/get
预期输出:
HTTP/1.1 200 OK
server: istio-envoy
date: Thu, 16 Jun 2022 07:10:08 GMT
content-type: application/json
content-length: 504
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 3
content-security-policy: frame-ancestors none;
x-frame-options: deny
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
referrer-policy: no-referrer
x-download-options: noopen
x-dns-prefetch-control: off
feature-policy: camera 'none';microphone 'none';geolocation 'none';encrypted-media 'none';payment 'none';speaker 'none';usb 'none';
可以看到,响应头中已经添加了content-security-policy
、x-fram-options
、x-xss-protection
等保护应用程序的基准响应头。
在网关的请求响应中增加自定义响应头
通过在AddHeader
插件的参数headers
中提供响应头内容,来改写AddHeader
插件默认添加的基准响应头,或者在默认基准响应头的基础上添加自定义响应头。
例如,在插件参数中填写如下配置:
headers:
x-xss-protection: "0"
app: httpbin
此参数将网关响应头中的x-xss-protection
内容改写为0
,并增加一个自定义的响应头app: httpbin
选择插件的生效范围为网关生效,并选择生效至网关ingressgateway
。
执行以下命令,进行测试。
curl -I {网关ip地址}/get
预期输出:
HTTP/1.1 200 OK
server: istio-envoy
date: Thu, 16 Jun 2022 07:19:51 GMT
content-type: application/json
content-length: 504
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 2
app: httpbin
x-xss-protection: 0
content-security-policy: frame-ancestors none;
x-frame-options: deny
x-content-type-options: nosniff
referrer-policy: no-referrer
x-download-options: noopen
x-dns-prefetch-control: off
feature-policy: camera 'none';microphone 'none';geolocation 'none';encrypted-media 'none';payment 'none';speaker 'none';usb 'none';
可以看到,响应头中的x-xss-protection
已经改写为0
,同时增加了响应头app: httpbin
。