Panduan Lengkap untuk Mengkonfigurasi Judul HTTP untuk Keamanan


Perusahaan yang menjual kartu penilaian keamanan sedang meningkat, pengaruhnya dalam penjualan perusahaan meningkat. Selain itu, ada orang yang bingung dengan peringkat keamanan penjual yang rendah, dan mereka yang setidaknya sekali, melihat peringkat, menolak untuk membeli - saya berbicara dengan orang-orang seperti itu.


Saya melihat bagaimana perusahaan-perusahaan ini menghitung kinerja keselamatan perusahaan lain. Ternyata mereka mencari kombinasi penggunaan header HTTP untuk keamanan dan reputasi alamat IP.


Reputasi alamat IP didasarkan pada daftar hitam dan informasi daftar spammer dikombinasikan dengan informasi tentang pemilik alamat IP publik. Pada prinsipnya, itu harus bersih jika perusahaan Anda tidak mengirim spam dan dapat dengan cepat mengidentifikasi dan menghentikan implementasi jahat. Menggunakan header keamanan HTTP dihitung dengan cara yang sama seperti Mozilla's Observatory berfungsi.


Dengan demikian, peringkat sebagian besar perusahaan terutama ditentukan oleh pos yang termasuk dalam situs web publik untuk keamanan.


Menetapkan judul dengan benar tidak lama (tidak diperlukan verifikasi serius), tetapi itu akan meningkatkan keamanan situs dan membantu tidak kehilangan pelanggan untuk siapa keselamatan bukan frase kosong


Saya ragu nilai metodologi verifikasi yang disebutkan, apalagi, label harga untuk layanan ini terlalu tinggi. Kecil kemungkinan bahwa pemasok layanan ini dapat menentukan keamanan sumber daya dengan akurasi yang dinyatakan. Namun, situasi ini menekankan sekali lagi betapa pentingnya duduk dan meluangkan waktu untuk menghidupkan dan mengatur judul yang benar.


Dalam artikel ini saya akan berbicara tentang tajuk yang paling sering diperiksa, untuk setiap tajuk saya akan menyarankan nilai-nilai keamanan dan memberikan contoh pengaturan. Pada akhirnya saya akan memberikan contoh pengaturan untuk aplikasi umum dan server web.


Header Keamanan Penting


Konten-Keamanan-Kebijakan


CSP digunakan untuk mencegah skrip lintas situs - dengan menentukan sumber daya mana yang dapat diunduh. Dari seluruh daftar, tajuk ini akan membutuhkan lebih banyak waktu daripada yang lainnya untuk dibuat dan didukung dengan benar, dan bahkan lebih banyak orang lain yang berisiko. Saat mengembangkan CSP, periksa dengan cermat - jika Anda tiba-tiba memblokir sumber yang Anda gunakan, maka ganggu fungsionalitas situs Anda sendiri.


Untuk versi awal, Anda dapat menggunakan alat yang luar biasa - ekstensi untuk browser Mozilla, Laboratorium CSP . Instal di peramban, pelajari dengan seksama situs yang ingin Anda buat CSP, dan kemudian gunakan CSP yang dihasilkan di situs Anda. Idealnya, Anda masih perlu mengerjakan ulang JavaScript agar Anda dapat menghapus arahan inline yang tidak aman.


CSP mungkin tampak rumit dan membingungkan, jadi jika Anda ingin mempelajari lebih dalam topik ini, kunjungi situs web resminya .


Anda dapat melakukan pra-konfigurasi CSP seperti ini (di situs pertempuran, kemungkinan besar akan membutuhkan banyak modifikasi). Tambahkan domain ke setiap bagian situs Anda.


# Default to only allow content from the current site # Allow images from current site and imgur.com # Don't allow objects such as Flash and Java # Only allow scripts from the current site # Only allow styles from the current site # Only allow frames from the current site # Restrict URL's in the <base> tag to current site # Allow forms to submit only to the current site Content-Security-Policy: default-src 'self'; img-src 'self' https://i.imgur.com; object-src 'none'; script-src 'self'; style-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; 

Ketat-transportasi-keamanan


Header ini memberi tahu browser bahwa Anda hanya dapat memasuki situs menggunakan protokol HTTPS - selalu aktifkan jika HTTPS diaktifkan di situs Anda. Sertakan di semua subdomain yang digunakan, jika ada.


 Strict-Transport-Security: max-age=3600; includeSubDomains 

X-Content-Type-Options


Berkat tajuk ini, peramban mematuhi jenis MIME yang dipasang oleh aplikasi, yang membantu mencegah beberapa serangan skrip lintas situs.


Ini juga mengurangi risiko perilaku aplikasi yang tidak terduga ketika browser salah "menebak" jenis konten di situs - misalnya, jika pengembang menunjuk halaman "HTML" dan browser melihat JavaScript dan mencoba membuat halaman sesuai. Berkat tajuk ini, peramban selalu menyimpan jenis MIME yang diinstal oleh server.


 X-Content-Type-Options: nosniff 

Kontrol cache


Yang ini akan lebih buruk daripada yang lain, karena untuk berbagai jenis konten Anda mungkin memerlukan kebijakan caching yang berbeda.


Tidak ada informasi sensitif - seperti halaman pengguna atau halaman pembayaran produk - yang harus di-cache. Salah satu alasan untuk ini adalah bahwa pengguna komputer lain tidak menekan tombol kembali, tidak membaca riwayat dan tidak melihat data pribadi pengguna lain.


Namun, Anda dapat dan harus men-cache halaman-halaman yang jarang diperbarui, seperti sumber daya statis (gambar, file CSS dan JS). Caching dapat dikonfigurasi berdasarkan halaman-demi-halaman, atau menggunakan regex di pengaturan server.


 # Don't cache by default Header set Cache-Control no-cache # Cache static assets for 1 day <filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$"> Header set Cache-Control "max-age=86400, public" </filesMatch> 

Kedaluwarsa


Header ini menetapkan waktu di mana permintaan saat ini di-cache. Itu diabaikan jika header usia maks Kontrol Cache diaktifkan, jadi kami hanya mengaktifkannya jika pemindai sederhana memeriksanya - tidak termasuk kontrol caching.


Kami berasumsi bahwa untuk alasan keamanan browser tidak melakukan cache apa pun, sehingga tanggal di header akan selalu di masa lalu.


 Expires: 0 

Opsi-bingkai X


Header ini memungkinkan tampilan situs dalam iFrame.


Dengan menempatkan situs web Anda di iFrame, sumber daya jahat mendapat kesempatan untuk melakukan serangan clickjacking - dengan meluncurkan beberapa jenis JavaScript yang mengelabui pengguna agar mengklik iFrame, dan kemudian mulai berinteraksi dengan sumber daya dari, pengguna, nama (mis., Seseorang mengklik tautan atau tombol jahat) tanpa menyadarinya!).


Header ini harus selalu dikonfigurasi untuk gagal, dengan pengecualian jika Anda sengaja menggunakan bingkai. Maka tajuk harus diatur ke sumber yang sama. Jika Anda menggunakan bingkai dengan situs yang berbeda secara default, masukkan daftar putih domain pihak ketiga.


Juga harus dicatat bahwa header ini digantikan oleh direktif bingkai-leluhur CSP. Saya sarankan menyalakannya untuk saat ini, tetapi hanya untuk mematikan alat untuk memeriksa header, mereka kemungkinan besar akan menyingkirkannya di masa depan.


 X-Frame-Options: deny 

Akses-Kontrol-Bolehkan-Asal


Header ini memberi tahu browser kode eksternal mana dari situs pihak ketiga mana yang berhak mengajukan permintaan ke halaman tertentu. Pengaturan standar biasanya benar, tetapi Anda dapat mengubahnya jika perlu.


Misalnya, situs A berisi semacam JavaScript yang ingin membuat permintaan ke situs B. Situs B harus menanggapi permintaan ini - jika tajuk memungkinkan situs A untuk membuat permintaan. Jika Anda perlu mengonfigurasi banyak sumber, lihat detail di halaman MDN .


Di sini Anda bisa sedikit bingung, jadi saya membuat diagram - untuk menggambarkan cara kerja header ini:



Aliran Data dengan Access-Control-Allow-Origin


 Access-Control-Allow-Origin: http://www.one.site.com 


Pastikan bahwa cookie Anda ditetapkan hanya melalui protokol HTTPS (dengan enkripsi) dan cookie itu tidak dapat diakses melalui JavaScript. File-file ini hanya dapat dikirim jika situs Anda juga mendukung HTTPS, sebagaimana mestinya. Anda selalu perlu mengatur bendera ini:


  • Aman
  • HTTPOnly

Contoh definisi cookie:


 Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly 

Baca lebih lanjut di dokumentasi cookie Mozilla yang luar biasa.


X-XSS-Perlindungan


Header ini memberi tahu browser untuk membatalkan serangan skrip lintas situs yang terdeteksi. Dengan menyalakannya, Anda tidak mengambil banyak risiko, tetapi mengujinya sebelum meluncurkannya ke lingkungan produksi.


 X-XSS-Protection: 1; mode=block 

Contoh pengaturan server web


Secara umum, dalam pengaturan server yang terbaik adalah menambahkan header ke seluruh situs. Cookie adalah pengecualian, karena mereka didefinisikan dalam aplikasi itu sendiri.


Saya menyarankan Anda, sebelum menambahkan header ke situs, periksa terlebih dahulu dengan Observatory atau lihat secara manual di header - periksa mana yang sudah diinstal. Beberapa mesin situs dan server akan menginstal semuanya sendiri, jadi terapkan saja tajuk yang Anda butuhkan atau ubah yang membutuhkannya.


Konfigurasi Apache


Contoh konfigurasi Apache dalam .htaccess:


 <IfModule mod_headers.c> ## CSP Header set Content-Security-Policy: default-src 'self'; img-src 'self' https://i.imgur.com; object-src 'none'; script-src 'self'; style-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; ## General Security Headers Header set X-XSS-Protection: 1; mode=block Header set Access-Control-Allow-Origin: http://www.one.site.com Header set X-Frame-Options: deny Header set X-Content-Type-Options: nosniff Header set Strict-Transport-Security: max-age=3600; includeSubDomains ## Caching rules # Don't cache by default Header set Cache-Control no-cache Header set Expires: 0 # Cache static assets for 1 day <filesMatch ".(ico|css|js|gif|jpeg|jpg|png|svg|woff|ttf|eot)$"> Header set Cache-Control "max-age=86400, public" </filesMatch> </IfModule> 

Konfigurasi nginx


 ## CSP add_header Content-Security-Policy: default-src 'self'; img-src 'self' https://i.imgur.com; object-src 'none'; script-src 'self'; style-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; ## General Security Headers add_header X-XSS-Protection: 1; mode=block; add_header Access-Control-Allow-Origin: http://www.one.site.com; add_header X-Frame-Options: deny; add_header X-Content-Type-Options: nosniff; add_header Strict-Transport-Security: max-age=3600; includeSubDomains; ## Caching rules # Don't cache by default add_header Cache-Control no-cache; add_header Expires: 0; # Cache static assets for 1 day location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff|ttf|eot)$ { try_files $uri @rewriteapp; add_header Cache-Control "max-age=86400, public"; } 

Pengaturan Header Tingkat Aplikasi


Jika Anda tidak memiliki akses ke server web atau persyaratan untuk mengatur tajuknya rumit, maka Anda mungkin harus mengonfigurasinya dalam aplikasi itu sendiri. Biasanya untuk seluruh situs ini dilakukan dengan menggunakan middleware, atau berdasarkan pada pengaturan header satu kali untuk setiap permintaan.


Untuk singkatnya, saya hanya menyertakan satu tajuk dalam setiap contoh. Anda menambahkan dengan cara yang sama semua yang dibutuhkan.


Node dan ekspres:


Tambahkan jalur pemasangan global:


 app.use(function(req, res, next) { res.header('X-XSS-Protection', 1; mode=block); next(); }); 

Jawa dan Musim Semi


Saya memiliki sedikit pengalaman dengan Spring, tetapi Baeldung memiliki panduan hebat dalam mengatur header di Spring.


Php


Saya tidak terbiasa dengan berbagai lingkungan PHP. Cari middleware untuk kueri. Untuk satu permintaan, semuanya sederhana.


 header("X-XSS-Protection: 1; mode=block"); 

Python / Django


Django menyertakan middleware keamanan yang dapat disesuaikan yang akan melakukan semua ini untuk Anda. Aktifkan terlebih dahulu.


Jawaban dari beberapa halaman dapat diartikan sebagai kamus. Django memiliki cara khusus untuk bekerja dengan caching, dan jika Anda ingin mengkonfigurasi header caching dengan cara ini, Anda perlu membiasakan diri dengannya.


 response = HttpResponse() response["X-XSS-Protection"] = "1; mode=block" 

Kesimpulan


Pengaturan header adalah proses yang relatif sederhana dan cepat, tetapi memberikan peningkatan tingkat keamanan situs - dalam hal perlindungan data, dari skrip lintas situs dan jacking klik.


Di masa depan, Anda akan melindungi diri dari kegagalan transaksi, karena peringkat keamanan Anda akan tetap di level tersebut. Praktik mengevaluasinya berdasarkan parameter yang telah saya teliti mendapatkan momentum, dan bagi saya tampaknya perannya di tahun-tahun mendatang di bidang penjualan hanya akan meningkat.


Beri tahu saya jika saya melewatkan beberapa tajuk penting!

Source: https://habr.com/ru/post/id471746/


All Articles