Web uygulamaları için HTTP yanıt üst bilgileri ekleyerek uygulama güvenliğini artırabilirsiniz. Bu konuda, Service Mesh (ASM) içinde bir Envoy filtresi kullanarak HTTP yanıt üst bilgilerinin nasıl ekleneceği açıklanmaktadır.
Önkoşullar
Bir Service Mesh (ASM) örneği oluşturdunuz. ACK kümesini ASM örneğine eklediniz. Daha fazla bilgi için bkz. ASM örneği oluşturma ve Küme ekleme ASM örneğine.
kubectl kullanarak ASM örneğine bağlandınız. Daha fazla bilgi için bkz. Istio kaynaklarına erişmek için kontrol düzleminde kubectl kullanma.
ASM örneğinde bir uygulama dağıttınız. Daha fazla bilgi için bkz. ASM örneğinde uygulama dağıtma.
Gerekli Istio kaynaklarını tanımladınız. Daha fazla bilgi için bkz. Trafiği hizmetin farklı sürümlerine yönlendirmek için Istio kaynaklarını kullanma.
Arka plan bilgileri
Open Web Application Security Project (OWASP), uygulamaların güvenliğini artırmak amacıyla HTTP yanıt üst bilgilerinin nasıl kullanılacağını açıklayan en iyi uygulamalar ve bir kodlama çerçevesi sunar. Aşağıdaki tabloda temel HTTP yanıt üst bilgileri açıklanmaktadır.
HTTP yanıt üst bilgisi | Varsayılan değer | Açıklama |
Content-Security-Policy | frame-ancestors none; | Diğer web sitelerinden gelen tıklama hırsızlığı (clickjacking) saldırılarını önler. |
X-XSS-Protection | 1;mode=block | Tarayıcının çapraz site betik çalıştırma (XSS) filtresini (varsa) etkinleştirir; böylece tarayıcı XSS saldırıları algılandığında işlemeyi durdurur. |
X-Content-Type-Options | Nosniff | Tarayıcının içerik koklamasını devre dışı bırakır. |
Referrer-Policy | no-referrer | İsteklerle birlikte hiçbir yönlendirici bilgisinin gönderilmeyeceğini belirtir. |
X-Download-Options | noopen | Internet Explorer'ın eski sürümlerinin indirmelerin otomatik olarak yürütülmesine izin vermesini engeller. |
X-DNS-Prefetch-Control | off | Web sayfalarındaki harici köprüler için DNS ön getirmeyi devre dışı bırakır. |
Server | envoy | Yanıtı oluşturan sunucudur. Bu HTTP yanıt üst bilgisi, Istio giriş ağ geçidi tarafından otomatik olarak ayarlanır. |
X-Powered-by | Yok | Barındırma ortamları veya diğer çerçeveler hakkında bilgi içerir. Güvenlik açığı bulunan uygulama sunucularının adını ve sürüm bilgilerini gizlemek istiyorsanız bu HTTP yanıt üst bilgisini ayarlamayın. |
Feature-Policy | camera 'none'; microphone 'none'; geolocation 'none'; encrypted-media 'none'; payment 'none'; speaker 'none'; usb 'none'; | Tarayıcılar tarafından kullanılabilecek özellikleri ve API işlemlerini belirtir. |
Bu örnekte bir Bookinfo uygulaması kullanılmaktadır. Daha fazla bilgi için bkz. ASM örneğinde uygulama dağıtma. Uygulamanın HTTP yanıt üst bilgilerini sorgulamak için aşağıdaki curl komutunu çalıştırabilirsiniz:
curl -I http://{IP address of the ingress gateway}/productpage
# Output example
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
Komut çıktısı, uygulamanın önceki tabloda açıklanan HTTP yanıt üst bilgilerinden hiçbirini içermediğini göstermektedir. Uygulama güvenliğini artırmak amacıyla uygulamaya HTTP yanıt üst bilgileri eklemek üzere bir Envoy filtresi oluşturabilirsiniz.
Yordam
-
ASM örneğinizin sürümüne göre bir Envoy filtresi dağıtın.
Sürümü 1.12.4.0 veya üzeri olan bir ASM örneği için
ASM konsolunda Market Place sayfasından bir Envoy filtresi dağıtabilirsiniz.
ASM konsoluna oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
Market Place sayfasında Add HTTP response headers öğesini tıklayın. Plugin Detail sayfasında Create Plug-in Instance öğesini tıklayın.
Plugin Effective scope bölümünde Gateway Scope seçeneğini belirleyin ve ardından Add ASM Gateway to effective scope öğesini tıklayın.
-
Add ASM Gateway to effective scope iletişim kutusunda Select ASM Gateway bölümünde ingressgateway öğesini seçin, ingressgateway öğesini selected bölümüne eklemek için
simgesini tıklayın ve ardından OK öğesini tıklayın.Notingressgateway, ASM tarafından dağıtılan varsayılan ağ geçidinin adıdır. Bu özelliği uygulamak istediğiniz diğer ASM ağ geçitlerini de seçebilirsiniz.
-
Plugin Config bölümünde YAML düzenleyicideki tüm içeriği silin, Plugin Switch seçeneğini açın ve eklentinin etkinleştirilmesini bekleyin.
Eklenti etkinleştirildikten sonra ASM otomatik olarak bir Envoy filtresi oluşturur.
Sürümü 1.12.4.0'dan önce olan bir ASM örneği için
Bir Envoy filtresi dağıtmak için aşağıdaki komutları çalıştırabilirsiniz:
proxyVersion: Envoy filtresinin uygulanacağı Istio sürümünü belirtir. Değeri Istio sürümünüz olarak ayarlayın. Envoy filtresindeki bazı alanlar Istio sürümüyle uyumsuz olabilir. Istio sürümünüze bağlı olarak Envoy filtresindeki alanları değiştirmeniz gerekebilir:Istio sürümünüz 1,8 veya önceki bir sürümse
proxyVersionparametresini Istio sürümünüz olarak ayarlayın veenvoy.filters.network.http_connection_managerifadesinienvoy.http_connection_managerile,envoy.filters.http.routerifadesinienvoy.routerile vetype.googleapis.com/envoy.extensions.filters.http.lua.v3.Luaifadesinitype.googleapis.com/envoy.config.filter.http.lua.v2.Luaile değiştirin.Istio sürümünüz 1,9 veya sonraki bir sürümse
proxyVersionparametresini Istio sürümünüz olarak ayarlayın.
-
HTTP yanıt üst bilgilerinin başarıyla eklenip eklenmediğini kontrol etmek için aşağıdaki komutu çalıştırın:
{IP address of the ingress gateway}ifadesini giriş ağ geçidinizin gerçek IP adresiyle değiştirin. Giriş ağ geçidinin IP adresini elde etme hakkında daha fazla bilgi için Trafiği hizmetin farklı sürümlerine yönlendirmek için Istio kaynaklarını kullanma konusundaki "Giriş ağ geçidinin IP adresini alma" bölümüne bakın.curl -I http://{IP address of the ingress gateway}/productpageBeklenen çıktı:
HTTP/1.1 200 OK content-type: text/html; charset=utf-8 content-length: 4183 server: istio-envoy date: Tue, 28 Jan 2020 09:07:01 GMT x-envoy-upstream-service-time: 17 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';Komut çıktısı, uygulamanın önceki tabloda açıklanan temel HTTP yanıt üst bilgilerini içerdiğini göstermektedir.
SSS
Özel karakterler içeren bir URL kullanarak bir uygulamaya neden erişemiyorum?
Özel karakterlerin kodlama biçimleri URL kodlama kuralına uygun olmayabilir. Örneğin, Á özel karakteri için ASCII kodlaması yerine Unicode kodlaması kullanılır. Daha fazla bilgi için bkz. Envoy cannot parse non-alphanumeric characters if not urlencoded.