Defaults.Exposed › Pembaikan › Perlindungan clickjacking (X-Frame-Options)
Cara memperbaiki Perlindungan clickjacking (X-Frame-Options)
Arahan satu baris yang memberitahu pelayar untuk tidak membenarkan laman web lain memuat laman anda secara senyap di dalam mereka sendiri. Tanpanya, penipu boleh menyembunyikan halaman sebenar anda yang telah log masuk di belakang halaman palsu dan menipu pelanggan anda untuk mengklik perkara yang mereka tidak berniat — meluluskan pembayaran, menukar kata laluan, memberikan akses.
Kesimpulan untuk perniagaan anda: Penipu boleh secara tidak kelihatan membungkus laman web langsung anda di dalam yang palsu dan mencuri wang atau akses akaun dari pelanggan anda yang telah log masuk — dan kepada pelanggan ia kelihatan seperti laman anda yang melakukannya. Pembetulan adalah percuma dan mengambil masa pembangun kira-kira 15 minit; membiarkannya tidak diperbetulkan adalah jurang yang diketahui yang jenayah dan pembeli yang berhati-hati boleh kesan dalam beberapa saat.
Apakah kos yang boleh timbul
- Penipu menyembunyikan skrin log masuk atau pembayaran sebenar anda di belakang halaman yang kelihatan tidak berbahaya dan menipu pelanggan untuk 'mengesahkan' pindahan atau perubahan tetapan tanpa menyedarinya — pelanggan menyalahkan anda, bukan penyerang.
- Kawasan akaun anda yang log masuk dimuatkan secara tidak kelihatan di atas halaman 'Anda menang — klik untuk menuntut'; klik itu sebenarnya meluluskan perubahan sebenar pada akaun pelanggan, dan anda yang menerima panggilan sokongan yang marah.
- Pasukan IT prospek menjalankan imbasan keselamatan pantas sebelum menandatangani, melihat laman anda boleh ditanam oleh sesiapa, dan menandanya sebagai risiko yang menangguhkan atau membunuh urusan perniagaan.
- Jenama anda menjadi umpan dalam kempen penipuan; pelanggan yang terperangkap mengingatnya sebagai 'syarikat yang lamannya membenarkan ia berlaku'.
- Imbasan juruaudit atau insurans siber menyenaraikan perlindungan clickjacking yang hilang sebagai kegagalan kebersihan asas — murah untuk diperbetulkan, memalukan untuk ditandakan.
Mengapa ia penting. Ini adalah tetapan percuma satu baris yang mengambil masa beberapa minit untuk ditambah, dan ia menutup seluruh kelas penipuan yang ditujukan kepada pelanggan anda yang log masuk. Pada pemarkahan kami ia adalah semakan keselamatan web yang bernilai-mata-sebenar yang dinilai keparahan tinggi, kerana pengepala yang hilang meninggalkan lubang yang diketahui dan mudah-diperiksa yang jenayah automatik dan pembeli cari.
Apa ini, dalam bahasa mudah
Apabila seseorang melawati laman web anda, pelayar mereka juga boleh diberitahu untuk memuatkan laman anda di dalam laman web lain — seperti tetingkap kecil yang ditanam di dalam halaman yang lebih besar. Itu kedengaran tidak berbahaya, dan kadang-kadang ia tidak. Tetapi ia adalah mekanisme di sebalik serangan yang dipanggil clickjacking.
Inilah helahnya. Penipu membina halaman mereka sendiri dan secara senyap memuatkan laman web sebenar anda di dalamnya — tidak kelihatan, dibuat sepenuhnya telus. Kemudian mereka meletakkan kandungan mereka sendiri di atas: butang yang berkilat, “Mainkan video,” “Tuntut hadiah anda.” Pelanggan anda melihat halaman penyerang dan mengklik apa yang kelihatan seperti butang yang tidak berbahaya. Tetapi kerana laman sebenar anda sedang duduk secara tidak kelihatan di bawah kursor mereka, klik itu sebenarnya mendarat pada halaman anda — mengesahkan pembayaran, menukar kata laluan, meluluskan akses, menerima kebenaran. Pelanggan fikir mereka mengklik satu perkara; sebenarnya mereka mengklik yang lain, pada laman yang mereka percayai.
Perlindungan clickjacking adalah arahan pendek dan tidak kelihatan yang laman web anda hantar kepada pelayar setiap pengunjung yang berkata, secara berkesan:
“Jangan biarkan laman web lain memuatkan saya di dalam mereka. Jika ada yang cuba, tolak.”
Pelayar moden mematuhi ini secara automatik. Dengan ia dihidupkan, helah itu hanya tidak berfungsi — salinan laman anda yang ditanam menolak untuk dimuatkan. Tanpanya, laman anda boleh digunakan sebagai lapisan tersembunyi dalam penipuan, dan pelanggan yang terperangkap akan mengaitkan keseluruhan perkara dengan jenama anda, bukan jenama penyerang.
Apa yang ini boleh koskan anda
Ini adalah senario realistik dan harian. Kami tidak pernah menamakan perniagaan sebenar; ini adalah ilustrasi bagaimana jurang digunakan.
-
“Pengesahan” yang tidak kelihatan. Pelanggan log masuk ke portal akaun anda dalam satu tab. Mereka mendarat pada halaman (dari iklan, e-mel, hasil carian) yang menjanjikan sesuatu yang menarik dan menunjukkan butang “Teruskan” yang besar. Tersembunyi di bawah butang itu adalah kawalan “Sahkan pindahan” atau “Tukar e-mel” sebenar anda, dimuatkan dari sesi log masuk mereka sendiri. Mereka mengklik “Teruskan” — dan tanpa menyedarinya meluluskan perubahan pada akaun sebenar mereka dengan anda. Bagi mereka, dan bagi pasukan sokongan anda, ia kelihatan seperti mereka yang melakukannya di laman anda.
-
Rampasan tetapan. Penyerang membingkai halaman tetapan akaun anda dan melapisi permainan atau tinjauan yang tidak bersalah di atasnya. Beberapa klik di tempat yang betul secara senyap menukar tetapan — menambah e-mel penyerang sebagai alamat pemulihan, memberikan kebenaran kepada aplikasi, atau melumpuhkan amaran keselamatan. Akaun kini terjejas secara senyap, dan tiada yang kelihatan salah pada masa itu.
-
Urusan perniagaan yang tertangguh. Pelanggan yang lebih besar menghantar soal selidik keselamatan standard mereka sebelum menandatangani. Satu baris bertanya sama ada laman anda menetapkan perlindungan anti-bingkai (X-Frame-Options / CSP frame-ancestors). Kenalan IT anda perlu menjawab “tidak,” dan perolehan berhenti sementara anda bergegas untuk membetulkan tetapan percuma 15 minit yang kini kelihatan seperti bendera merah di hadapan pembeli.
-
Kempen jenama-sebagai-umpan. Kerana halaman sebenar dan dipercayai anda boleh ditanam, penyerang menggunakan log masuk atau checkout anda sebagai lapisan yang meyakinkan dalam kempen pancingan data yang lebih luas. Pelanggan yang terperangkap tidak menyalahkan penyerang yang gelap — mereka mengingatinya sebagai masa “laman anda” membiarkan mereka ditipu.
-
Tanda audit. Imbasan penanggung insurans, atau juruaudit yang menyemak postur keselamatan anda, menyenaraikan perlindungan clickjacking yang hilang antara penemuan. Ia adalah item kebersihan asas teks; mendapatkannya ditandakan menandakan perlindungan percuma dan mudah tidak wujud — yang memberi warna bagaimana keselamatan anda yang selebihnya dinilai.
Benang melalui semua ini: kerosakan mendarat pada pelanggan sebenar yang log masuk yang melakukan sesuatu yang mereka tidak berniat — dan ia membawa nama anda, bukan penyerang.
Apa yang ia sebenarnya
Apabila pelayar meminta laman anda untuk halaman, pelayan anda menghantar semula halaman ditambah beberapa “pengepala” tidak kelihatan — arahan tambahan yang pelayar baca tetapi pengunjung tidak pernah lihat. Perlindungan clickjacking dihantar melalui pengepala ini. Terdapat dua, dan semakan kami lulus jika salah satu hadir:
1. Pengepala yang lebih lama — X-Frame-Options:
X-Frame-Options: SAMEORIGIN
Ini adalah kawalan yang telah lama wujud dan disokong secara meluas. Ia mengambil salah satu daripada dua nilai praktikal:
SAMEORIGIN— laman anda sendiri boleh menanam halamannya sendiri, tetapi tiada laman luar yang boleh. Lalai yang selamat untuk hampir semua orang.DENY— tiada siapa boleh menanam halaman anda, termasuk anda. Gunakan ini hanya jika laman anda tidak pernah membingkai kandungannya sendiri.
2. Pengepala moden — Content-Security-Policy frame-ancestors:
Content-Security-Policy: frame-ancestors 'self';
Ini adalah kawalan yang lebih baharu dan lebih fleksibel dan yang ditunjukkan oleh standard semasa. Ia melakukan kerja yang sama tetapi membolehkan anda lebih tepat tentang siapa yang boleh menanam anda:
frame-ancestors 'self'— setara denganSAMEORIGIN.frame-ancestors 'none'— setara denganDENY.frame-ancestors 'self' https://partner.example.com— laman anda sendiri ditambah satu rakan kongsi yang dinamai dan dipercayai, dan tiada orang lain.
Apa yang “baik” kelihatan
Persediaan paling kuat menggunakan kedua-duanya: frame-ancestors untuk pelayar moden (dan untuk ketepatan menamakan pembenam yang dibenarkan) dan X-Frame-Options: SAMEORIGIN sebagai pengganti untuk klien yang lebih lama. Semakan kami berpuas hati dengan salah satu sahaja — tetapi kerana kedua-duanya percuma dan mengambil masa beberapa minit yang sama, tiada sebab untuk tidak menetapkan kedua-duanya.
Satu butiran penting yang pembangun anda harus tahu: pengepala Content-Security-Policy-Report-Only tidak menguatkuasakan apa-apa — ia hanya melaporkan. Jika anda mahu perlindungan clickjacking benar-benar berkuat kuasa, ia mesti datang dari pengepala yang menguatkuasakan (CSP normal dengan frame-ancestors, atau X-Frame-Options), bukan yang hanya-laporan.
Cara membetulkannya (percuma, ~15 minit)
Berikan bahagian ini kepada sesiapa yang menjalankan laman web anda — orang IT, pembangun web, atau sokongan pengehosan anda. Pembetulan adalah percuma. Ia adalah satu atau dua pengepala respons, atau peraturan dalam CDN anda. Tiada yang perlu dibeli.
Semakan lulus apabila sama ada pengepala X-Frame-Options (ditetapkan kepada DENY atau SAMEORIGIN) atau arahan CSP frame-ancestors hadir. Persediaan tali-pinggang-dan-penyangga yang disyorkan menambah kedua-duanya.
Langkah 1 — Putuskan betapa ketatnya
- Kebanyakan perniagaan:
SAMEORIGIN/frame-ancestors 'self'. Laman anda sendiri terus berfungsi; orang luar disekat. - Jika laman anda tidak pernah menanam halamannya sendiri:
DENY/frame-ancestors 'none'untuk penguncian maksimum. - Jika rakan kongsi yang tulen mesti menanam halaman tertentu: namakan mereka secara eksplisit dengan
frame-ancestors 'self' https://partner.example.com;dan tiada orang lain yang masuk.
Langkah 2 — Tambah pengepala (pilih platform anda)
Nginx — dalam blok server anda:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;
Apache — pastikan mod_headers diaktifkan, kemudian dalam hos maya anda:
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"
Microsoft IIS — dalam web.config dalam <customHeaders>:
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />
Cloudflare (atau CDN yang serupa): pergi ke Rules → Transform Rules → Modify Response Header, dan tambah dua peraturan yang menetapkan X-Frame-Options kepada SAMEORIGIN dan Content-Security-Policy kepada frame-ancestors 'self'; pada semua respons. Ini adalah laluan termudah jika anda tidak mempunyai akses pelayan langsung.
Sudah menghantar Content-Security-Policy untuk sebab lain? Jangan cipta pengepala CSP kedua — tambah frame-ancestors ke dalam dasar sedia ada anda. Dua pengepala CSP boleh bercanggah.
Pembina laman web (Squarespace, Wix, Shopify dan yang serupa): platform ini selalunya menetapkan perlindungan anti-bingkai untuk anda, jadi anda mungkin sudah lulus tanpa perlu melakukan apa-apa. Jika semakan kami menandakannya, kawalan biasanya berada dalam tetapan keselamatan platform, atau anda menambahnya pada CDN yang duduk di hadapan laman. (Nota: Google Workspace dan Microsoft 365 menggerakkan e-mel anda, bukan laman web anda — pengepala ini ditetapkan di mana sahaja laman awam anda sebenarnya berada, bukan dalam admin Workspace/365.)
Langkah 3 — Muat semula dan sahkan
Muat semula pelayan web atau paparkan peraturan CDN, kemudian muatkan laman langsung anda dan semak pengepala respons — alat pembangun pelayar → tab Rangkaian → klik permintaan halaman → Pengepala Respons, atau mana-mana alat semakan pengepala percuma. Sahkan pengepala muncul pada respons halaman sebenar, bukan hanya halaman utama. Kemudian jalankan semula semakan.
Kesilapan biasa
- Menggunakan CSP hanya-laporan dan menganggap ia melindungi anda.
Content-Security-Policy-Report-Onlyhanya melaporkan pelanggaran — ia tidak menguatkuasakan apa-apa. Anda memerlukan pengepala yang menguatkuasakan untuk perlindungan berkuat kuasa. - Menetapkan dua pengepala
Content-Security-Policyyang berasingan. Jika anda sudah mempunyai CSP, tambahframe-ancestorske dalamnya dan bukannya mengeluarkan dasar kedua; pengepala CSP yang bercanggah boleh menghasilkan tingkah laku yang tidak dijangka. - Menetapkan
DENYapabila laman anda sendiri menanam halamannya sendiri.DENYmenyekat semua bingkai, termasuk milik anda. Jika mana-mana bahagian laman anda menggunakan iframe daripada dirinya sendiri, gunakanSAMEORIGIN/frame-ancestors 'self', atau anda akan memutuskan halaman anda sendiri. - Hanya melindungi halaman utama. Halaman yang paling penting untuk clickjacking adalah yang log masuk — tetapan akaun, pengesahan pembayaran, admin. Pastikan pengepala digunakan di seluruh laman, bukan hanya halaman hadapan.
- Menganggap HTTPS atau kunci sudah merangkumi ini. Penyulitan dan anti-bingkai tidak berkaitan. Sijil yang sempurna tidak membuat apa-apa untuk menghentikan halaman anda ditanam.
- Bergantung pada penyelesaian lama. JavaScript “frame-busting” (skrip yang cuba keluar dari bingkai) tidak boleh dipercayai dan boleh dipintas. Pengepala adalah pembetulan yang betul dan dikuatkuasakan oleh pelayar.
Soalan Lazim
Saya bukan orang teknikal — bolehkah saya menangani perkara ini sendiri?
Anda tidak perlu melakukan bahagian teknikal. Ia adalah tetapan tunggal yang ditambah kepada pelayan laman web atau CDN anda, dan mana-mana pembangun web atau pembekal IT boleh menambahnya dalam beberapa minit. Berikan bahagian 'Cara membetulkannya' di bawah kepada mereka — ia memberitahu mereka dengan tepat apa yang perlu ditambah. Pembetulan adalah percuma; kami hanya mengenakan bayaran jika anda ingin kami terus memantau bahawa ia kekal wujud.
Adakah ini akan menghentikan laman saya sendiri, atau rakan kongsi yang sah, daripada memaparkan halaman saya?
Hanya jika anda menetapkannya terlalu ketat. Tetapan biasa ('SAMEORIGIN', atau 'frame-ancestors self') masih membenarkan laman web anda sendiri menanam halamannya sendiri secara normal — ia hanya menyekat laman luar. Jika rakan kongsi yang tulen perlu menanam satu halaman khusus anda, pembangun anda boleh membenarkan sumber tunggal itu sementara masih menyekat semua orang lain.
Kami adalah perniagaan kecil — adakah sesiapa akan benar-benar bersusah payah menyasari kami?
Serangan ini dijalankan secara pukal oleh alat automatik, bukan dipilih tangan. Laman yang lebih kecil sering diserang dengan tepat kerana mereka adalah yang tiada perlindungan asas seperti ini. Penyerang tidak perlu tahu siapa anda — mereka hanya memerlukan laman anda boleh ditanam. Menutup jurang tidak memerlukan kos apa-apa kepada anda.
Apa yang 'baik' sebenarnya kelihatan?
Sama ada pengepala X-Frame-Options yang ditetapkan kepada SAMEORIGIN (atau DENY), atau Content-Security-Policy dengan arahan frame-ancestors — sebaik-baiknya kedua-duanya. Semakan kami lulus jika salah satu hadir. Kawalan moden yang lebih fleksibel ialah frame-ancestors; X-Frame-Options adalah pengepala yang lebih lama yang masih merangkumi beberapa pelayar warisan, jadi persediaan tali-pinggang-dan-penyangga menggunakan kedua-duanya.
Bukankah ini sama dengan kunci SSL atau HTTPS?
Tidak — mereka melindungi terhadap perkara yang sama sekali berbeza. HTTPS menyulitkan sambungan supaya tiada siapa dapat membacanya dalam transit. Perlindungan clickjacking menghalang halaman anda daripada dimuatkan di dalam laman orang lain langsung. Anda boleh mempunyai sijil yang sempurna dan masih terbuka luas kepada clickjacking. Mereka adalah semakan berasingan dan anda mahu kedua-duanya.
Jika kami tidak membetulkannya, adakah ia menurunkan gred kami?
Ya. Ini adalah semakan keselamatan web yang dinilai, bukan maklumat — pengepala yang hilang merugikan mata dan dinilai keparahan tinggi, kerana ia secara langsung mendedahkan pelanggan yang log masuk anda kepada penipuan. Ia juga merupakan salah satu mata yang paling murah untuk dipulihkan: satu pengepala percuma, kira-kira 15 minit masa pembangun.