Anda dapat menambahkan header respons HTTP pada aplikasi web untuk meningkatkan keamanannya. Topik ini menjelaskan cara menggunakan filter Envoy guna menambahkan header respons HTTP di Service Mesh (ASM).
Prasyarat
-
Instans Service Mesh (ASM) telah dibuat dan kluster ACK telah ditambahkan ke instans tersebut. Untuk informasi selengkapnya, lihat Buat instans ASM dan Tambahkan kluster ke instans ASM.
Anda telah terhubung ke instans ASM menggunakan kubectl. Untuk informasi selengkapnya, lihat Gunakan kubectl pada lapisan kontrol untuk mengakses sumber daya Istio.
Aplikasi telah dideploy di instans ASM. Untuk informasi selengkapnya, lihat Deploy aplikasi di instans ASM.
Sumber daya Istio yang diperlukan telah didefinisikan. Untuk informasi selengkapnya, lihat Gunakan sumber daya Istio untuk mengarahkan traffic ke berbagai versi layanan.
Informasi latar belakang
Proyek Keamanan Aplikasi Web Terbuka (OWASP) menyediakan praktik terbaik dan kerangka kerja pengkodean untuk menjelaskan cara menggunakan header respons HTTP guna meningkatkan keamanan aplikasi. Tabel berikut menjelaskan header respons HTTP dasar.
Header respons HTTP | Nilai default | Deskripsi |
Content-Security-Policy | frame-ancestors none; | Mencegah serangan clickjacking dari situs web lain. |
X-XSS-Protection | 1;mode=block | Mengaktifkan filter skrip lintas situs (XSS) (jika tersedia) pada browser sehingga browser dapat berhenti melakukan rendering ketika serangan XSS terdeteksi. |
X-Content-Type-Options | Nosniff | Menonaktifkan content sniffing pada browser. |
Referrer-Policy | no-referrer | Menentukan agar tidak mengirim informasi referrer bersama permintaan. |
X-Download-Options | noopen | Mencegah versi lama Internet Explorer memungkinkan unduhan dieksekusi secara otomatis. |
X-DNS-Prefetch-Control | off | Menonaktifkan DNS prefetching untuk hyperlink eksternal pada halaman web. |
Server | envoy | Server yang menghasilkan respons. Header respons HTTP ini secara otomatis diatur oleh gerbang masuk Istio. |
X-Powered-by | N/A | Berisi informasi tentang lingkungan hosting atau framework lainnya. Jangan atur header respons HTTP ini jika Anda ingin menyembunyikan informasi nama dan versi server aplikasi yang rentan. |
Feature-Policy | camera 'none'; microphone 'none'; geolocation 'none'; encrypted-media 'none'; payment 'none'; speaker 'none'; usb 'none'; | Menentukan fitur dan operasi API yang tersedia untuk browser. |
Pada contoh ini, digunakan aplikasi Bookinfo. Untuk informasi selengkapnya, lihat Deploy aplikasi di instans ASM. Anda dapat menjalankan perintah curl berikut untuk mengkueri header respons HTTP aplikasi:
curl -I http://{IP address of the ingress gateway}/productpage
# Contoh output
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: 28Output perintah menunjukkan bahwa aplikasi tidak berisi header respons HTTP apa pun yang dijelaskan dalam tabel sebelumnya. Anda dapat membuat filter Envoy untuk menambahkan header respons HTTP bagi aplikasi guna meningkatkan keamanannya.
Prosedur
-
Deploy filter Envoy berdasarkan versi instans ASM Anda.
Untuk instans ASM dengan versi 1.12.4.0 atau lebih baru
Anda dapat menerapkan filter Envoy melalui halaman Market Place di Konsol ASM.
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
-
Di halaman Market Place, klik Add HTTP response headers. Di halaman Plugin Detail, klik Create Plug-in Instance.
-
Pada bagian Plugin Effective scope, pilih Gateway Scope, lalu klik Add ASM Gateway to effective scope.
-
Pada kotak dialog Add ASM Gateway to effective scope, pilih ingressgateway pada bagian Select ASM Gateway, klik ikon
untuk menambahkan ingressgateway ke bagian selected, lalu klik OK.Catataningressgateway adalah nama gerbang default yang dideploy oleh ASM. Anda juga dapat memilih gerbang ASM lain tempat fitur ini akan diterapkan.
-
Pada bagian Plugin Config, hapus semua konten dari editor YAML, aktifkan Plugin Switch, lalu tunggu hingga plugin diaktifkan.
Setelah plug-in diaktifkan, ASM secara otomatis membuat filter Envoy.
Untuk instans ASM dengan versi lebih lama dari 1.12.4.0
Anda dapat menjalankan perintah berikut untuk menerapkan filter Envoy:
proxyVersion: Menentukan versi Istio tempat filter Envoy diterapkan. Atur nilainya sesuai versi Istio Anda. Beberapa bidang dalam filter Envoy mungkin tidak kompatibel dengan versi Istio tersebut. Anda mungkin perlu menyesuaikan bidang dalam filter Envoy berdasarkan versi Istio Anda:Jika versi Istio Anda 1.8 atau lebih lama, atur parameter
proxyVersionsesuai versi Istio Anda dan gantienvoy.filters.network.http_connection_managerdenganenvoy.http_connection_manager,envoy.filters.http.routerdenganenvoy.router, sertatype.googleapis.com/envoy.extensions.filters.http.lua.v3.Luadengantype.googleapis.com/envoy.config.filter.http.lua.v2.Lua.Jika versi Istio Anda 1.9 atau lebih baru, atur parameter
proxyVersionsesuai versi Istio Anda.
-
Jalankan perintah berikut untuk memeriksa apakah header respons HTTP berhasil ditambahkan:
Ganti
{IP address of the ingress gateway}dengan alamat IP aktual gerbang masuk Anda. Untuk informasi selengkapnya tentang cara mendapatkan alamat IP gerbang masuk, lihat "Obtain the IP address of the ingress gateway" dalam topik Gunakan sumber daya Istio untuk mengarahkan traffic ke berbagai versi layanan.curl -I http://{IP address of the ingress gateway}/productpageOutput yang diharapkan:
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';Output perintah menunjukkan bahwa aplikasi berisi header respons HTTP dasar yang dijelaskan dalam tabel sebelumnya.
FAQ
Mengapa saya tidak dapat mengakses aplikasi menggunakan URL yang berisi karakter khusus?
Format encoding karakter khusus mungkin tidak sesuai dengan aturan encoding URL. Misalnya, encoding Unicode digunakan alih-alih encoding ASCII untuk karakter khusus Á. Untuk informasi selengkapnya, lihat Envoy cannot parse non-alphanumeric characters if not urlencoded.