Iframe buzilishi: Kontentingizning ruxsatsiz iframingini qanday to'xtatish mumkin
Bir marta mening saytimga tashrif buyurgan kishi mening havolalarimdan birini bosganida menga xabar berdi Twitter; u mening saytimga katta qalqib chiquvchi oyna va zararli kod ogohlantirishi bilan olib kelingan. Bu kimnidir qo'rqitish uchun etarli, shuning uchun men test qilishni boshladim. Mening saytimda hech qanday yomon narsa yo'q edi - muammo havola edi.
Boshqa saytdagi havola yuqoridagi asboblar panelini yaratdi, bu odamlarni mening saytimni ostidagi iframe-ga yuklayotganda zararli havolani bosishga undaydi. Aksariyat odamlar uchun mening saytim zararli kodni tarqatayotgandek tuyulishi mumkin. Men saytimni iframe ichida yuklaydigan har qanday saytni yoqtiraman deb aytmagan bo'lardim, shuning uchun men har qanday aqlli geek qiladigan ishni qildim… Men ramka to'xtatuvchisini yukladim.
Saytingizni iframing qilish har doim ham zararli emas. Biz yaqinda bir vositani ulashdik, Sniply, harakatga chaqiruv qo'shish uchun (CTA) siz baham ko'rgan har qanday veb-sayt havolasiga. Buni butun saytingizni iframe-ga joylashtirish va harakatga chaqiruv bilan tarkibingizga div-ni qo'llash orqali amalga oshiriladi.
Lekin men o'z mazmunim va sarflagan sa'y-harakatlarim haqida juda aniqman Martech Zone, shuning uchun hech kim mening kontentimni iframe qilishini xohlamayman, hatto havolani almashish platformasi bilan ham. Ba'zi tadqiqotlar olib borishda, buni hal qilishning bir qancha usullari mavjud.
Tarkibingizni JavaScript yordamida Iframingni qanday to'xtatish mumkin
Ushbu JavaScript kodi joriy oyna (self
) eng yuqori oyna emas (top
). Agar shunday bo'lmasa, bu sahifa freymda, iframe yoki shunga o'xshashda ekanligini bildiradi va skript eng yuqori oynani quyidagiga yo'naltiradi. URL joriy oynadan. Bu samarali chiqib ketadi iframe-dan.
<script type='text/javascript'>
if (top !== self) top.location.href = self.location.href;
</script>
Ushbu yondashuvning bir nechta salbiy tomonlari mavjud:
- JavaScript-ga ishonish: Agar foydalanuvchi JavaScript-ni o'chirib qo'ygan bo'lsa, bu usul ishlamaydi.
- Kechikishlar: JavaScript-ni ishga tushirishdan oldin biroz kechikish bo'lishi mumkin, bu vaqt davomida saytingizning ramkali versiyasi hali ham ko'rinib turishi mumkin.
- Oʻzaro kelib chiqish cheklovlari: Ba'zi hollarda, bir xil kelib chiqish siyosati ushbu skriptning mo'ljallanganidek ishlashiga to'sqinlik qilishi mumkin. Agar asosiy hujjat boshqa domenda bo'lsa, unga kira olmasligi mumkin
top.location.href
. - Frame-Busting-Busters uchun potentsial: Bundan tashqari, freymni buzish skriptlarining ishlashiga to'sqinlik qiladigan skriptlar (frame-busting-busters deb ataladi) mavjud.
Eng yaxshi yondashuv HTTP javob sarlavhalaridan foydalanishdir.
X-Frame-Options va Kontent-Xavfsizlik-Siyosat
har ikkala X-Frame-Options
va Content-Security-Policy
(CSP) veb-sayt xavfsizligini oshirish uchun ishlatiladigan HTTP javob sarlavhalari. Ularning har biri biroz boshqacha maqsadlarga xizmat qiladi va turli darajadagi moslashuvchanlikka ega.
X-Frame-Options
saytingiz a.ga oʻrnatilishi mumkinligini nazorat qilish uchun maxsus ishlab chiqilgan eski HTTP sarlavhasi <frame>
, <iframe>
, <embed>
yoki <object>
boshqa saytda. U uchta mumkin bo'lgan direktivaga ega:
DENY
– Qaysi sayt buni qilishga urinayotganidan qat’i nazar, sahifani ramkada ko‘rsatib bo‘lmaydi.SAMEORIGIN
– Sahifani faqat sahifaning o‘zi bilan bir xil kelib chiqishi bo‘yicha ramkada ko‘rsatish mumkin.ALLOW-FROM uri
– Sahifani faqat belgilangan joydagi ramkada ko‘rsatish mumkin.
Shu bilan birga, X-Frame-Options
Cheklangan, chunki u murakkabroq stsenariylarni bajara olmaydi, masalan, bir nechta turli manbalardan ramka yaratishga ruxsat berish yoki pastki domenlar uchun joker belgilardan foydalanish. Barcha brauzerlar qo'llab-quvvatlamaydi ALLOW-FROM
direktiv.
Content-Security-Policy
, boshqa tomondan, ancha moslashuvchan va kuchli HTTP sarlavhasi. Vaholanki, u hamma narsani qila oladi X-Frame-Options
va yana ko'p narsalarni qila oladi, uning asosiy maqsadi saytlararo skriptlarni o'z ichiga olgan keng ko'lamli kodni kiritish hujumlarining oldini olishdir (XSS) va klik qilish. U ishonchli kontent manbalarining oq ro'yxatini (skriptlar, uslublar, tasvirlar va boshqalar) belgilash orqali ishlaydi.
Kadrlarni boshqarish uchun CSP dan foydalanadi frame-ancestors
direktiv. Siz bir nechta manbalarni, jumladan, bir nechta domenlarni va joker belgilar subdomenlarini belgilashingiz mumkin. Mana bir misol:
cssCopy codeContent-Security-Policy: frame-ancestors 'self' yourdomain.com *.domain2.com;
Bu sahifani o'z saytida ramkalash imkonini beradi ('self'
), ustida yourdomain.com
, va istalgan subdomenida domain2.com
.
CSP o'rniga tavsiya etilmoqda X-Frame-Options
, chunki u hamma narsani hal qila oladi X-Frame-Options
qila oladi va boshqalar. Ko'pgina zamonaviy brauzerlar CSP-ni qo'llab-quvvatlasa-da, uni to'liq qo'llab-quvvatlamaydigan eski yoki kamroq tarqalgan brauzerlar bo'lishi mumkin.
Kontentingizni HTML bilan Iframingni qanday to'xtatish mumkin
Endi kontent-xavfsizlik-politika meta-tegi mavjud bo'lib, u kontentingizni iframe qilish imkoniyatini o'chiradi:
<meta http-equiv="Content-Security-Policy" content="frame-ancestors 'self' yourdomain.com">
HTML meta tegining samaradorligi cheklangan, chunki hamma brauzerlar ham ni hurmat qilmaydi Content-Security-Policy
meta teg yordamida o'rnatilganda.
Kontentingizni HTTP sarlavhalari bilan iframingni qanday to'xtatish mumkin
HTTP sarlavhalarini ishlatish yaxshiroqdir X-Frame-Options
or Content-Security-Policy
ramkani boshqarish uchun. Bu variantlar ishonchliroq va xavfsizroq va hatto JavaScript o'chirilgan bo'lsa ham ishlaydi. Agar HTTP sarlavhalarini o'rnatish uchun server ustidan nazoratingiz bo'lmasa, JavaScript usuli faqat oxirgi chora sifatida ishlatilishi kerak. Har bir misol uchun almashtiring yourdomain.com
haqiqiy domeningiz bilan.
Apache - O'zingizni o'zgartiring .htaccess
faylni quyidagicha:
Header always set X-Frame-Options SAMEORIGIN
Header always set Content-Security-Policy "frame-ancestors 'self' yourdomain.com"
nginx – Server blokini quyidagicha o‘zgartiring:
add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "frame-ancestors 'self' yourdomain.com";
IIS - buni o'zingizning ilovangizga quyidagini qo'shish orqali bajaring web.config
fayl:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="frame-ancestors 'self' yourdomain.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
WordPress – buni functions.php faylingizga ushbu kodni qo‘shish orqali bajaring:
function add_security_headers() {
header('X-Frame-Options: SAMEORIGIN');
header("Content-Security-Policy: frame-ancestors 'self' yourdomain.com");
}
add_action('send_headers', 'add_security_headers');
Ushbu konfiguratsiyalar sizning sahifangizni har qanday domen subdomenlarida emas, balki siz ko'rsatgan aniq domendagi iframe-larga joylashtirish imkonini beradi. Agar siz ba'zi subdomenlarga ruxsat bermoqchi bo'lsangiz, ularni aniq ro'yxatlashingiz kerak, masalan subdomain1.yourdomain.com
subdomain2.yourdomain.com
, va hokazo.
Kontentingizni bir nechta domenlardan iframing qilishga ruxsat bering
Content-Security-Policy HTTP javob sarlavhasi va ramka-ajdodlar direktivasi bilan bir nechta domenlarni belgilashingiz mumkin. Bo'sh joy har bir domenni ajratishi kerak. Mana bir misol:
Content-Security-Policy: frame-ancestors 'self' domain1.com domain2.com domain3.com;
Apache - O'zingizni o'zgartiring .htaccess
faylni quyidagicha:
Header always set X-Frame-Options SAMEORIGIN
Header always set Content-Security-Policy "frame-ancestors 'self' domain1.com domain2.com domain3.com"
nginx – Server blokini quyidagicha o‘zgartiring:
add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "frame-ancestors 'self' domain1.com domain2.com domain3.com";
IIS - buni o'zingizning ilovangizga quyidagini qo'shish orqali bajaring web.config
fayl:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self' domain1.com domain2.com domain3.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
Kontentingizni joker belgilar domenidan iframing qilishga ruxsat bering
Bundan tashqari, barcha subdomenlar uchun joker belgini belgilashingiz mumkin Content-Security-Policy
HTTP javob sarlavhasi va ramka-ajdodlar direktivasi. Mana misollar Content-Security-Policy
yangilanishi kerak bo'lgan kod:
Content-Security-Policy: frame-ancestors 'self' *.yourdomain.com;
Apache - O'zingizni o'zgartiring .htaccess
faylni quyidagicha:
Header always set Content-Security-Policy "frame-ancestors 'self' *.yourdomain.com"
nginx – Server blokini quyidagicha o‘zgartiring:
add_header Content-Security-Policy "frame-ancestors 'self' *.domain1.com *.domain2.com *.domain3.com";
IIS - buni o'zingizning ilovangizga quyidagini qo'shish orqali bajaring web.config
fayl:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="frame-ancestors 'self' *.yourdomain.com" />
</customHeaders>
</httpProtocol>
</system.webServer>