Admin subdomeni CSRFni to’xtatmaydi: ishga tushirishdan oldin to’rt tekshiruv
Yangi xost nomi yangi origin, ko’p hollarda o’sha sayt, shuning uchun same-site cookie fayllari va oddiy shakllar undan o’tadi. Tokenlar, darvoza va ruxsatni tekshiring.
Admin interfeysini admin.example.com ga ko’chirish haqiqiy yaxshilanish: u admin cookie fayllarini ommaviy sahifalardan uzoq tutadi, ikki ilovaga alohida kesh beradi va qat’iyroq tarmoq siyosatini bitta xost nomiga yo’naltirish imkonini beradi. Lekin bu CSRF nazorati emas va ommaviy sayt kodini kirgan administrator oldida ochiq qoldirish uchun xavfsiz qilmaydi. Ajratish brauzer chegara deb hisoblaydigan narsani o’zgartiradi, server tekshiradigan narsani emas, shuning uchun ish tugadi deyishdan oldin shu to’rt tekshiruvni bajaring.
Origin va saytni ikki xil so’z sifatida o’qing
Origin bu sxema, xost va port, shuning uchun https://www.example.com va https://admin.example.com turli origin. Sayt SameSite ma’nosida sxema plyus ro’yxatga olinadigan domen, shuning uchun bu ikki xost nomi odatda bitta sayt. Shu farq butun tuzoq: SameSite xususiyati opa-singil subdomenlar orasida yordam bermaydi, chunki brauzer so’rovni umuman saytlararo deb hisoblamaydi. Admin interfeysini haqiqatan boshqa ro’yxatga olinadigan domenga, masalan admin-example.net ga yo’naltiring, shunda so’rov haqiqatan saytlararo bo’ladi va aynan o’sha yerda SameSite=Lax yoki Strict ishonish mumkin bo’lgan ishni boshlaydi.
Bu haqda mulohaza yuritish o’rniga brauzerda sinab ko’ring.
Ommaviy saytni yuklang, dasturchi vositalarini oching va brauzer admin xostiga yo’naltirilgan so’rovga qaysi cookie fayllarini qo’shishini ko’ring. Agar cookieda Domain xususiyati bo’lmasa, u faqat xost uchun va o’z nomida qoladi; agar Domain=example.com bo’lsa, u har bir opa-singilga boradi va yangi subdomen bu cookie uchun sizga hech narsa bermadi.
Javobni o’qishni so’rov yuborishdan ajrating
Bir xil origin siyosati originlar orasida javoblarni o’qishni cheklaydi. U so’rov yuborilishini to’xtatmaydi va shakl brauzerda mavjud hisob ma’lumotlarini olib yurishiga to’sqinlik qilmaydi. Oddiy so’rov, shakl tarkibi turi yoki oddiy GET bilan, oldindan tekshiruvsiz yetkaziladi; keyin CORS chaqiruvchi skript javobni o’qiy olishini hal qiladi. CSRF butunlay yuborish tomonida yashaydi.
Shuning uchun serverga holatni o’zgartiradigan amallar uchun aniq tekshiruv kerak. Sessiyaga bog’langan sinxronizatsiya tokeni yoki serverda taqqoslanadigan ikki marta yuborish cookie fayli bu holatni qoplaydi; Origin yoki Referer taqqoslashini ikkinchi darvoza sifatida qo’shish arziydi, lekin yagona emas, chunki har bir so’rov bu sarlavhani olib yurmaydi va har bir proksi uni saqlamaydi. CSRF ning oldini olish bo’yicha OWASP yo’riqnomasi SameSite ni bir necha qatlamdan biri deb hisoblaydi, aynan shu sababdan.
Tarmoq darvozasi aslida nimani isbotlashini hal qiling
Admin xost oldidagi VPN chiqishlarining ruxsat ro’yxati yaxshi nazorat va zaif shaxs da’vosi. U so’rov VPN beradigan manzildan kelganini isbotlaydi, uni o’sha chiqishdagi hamma baham ko’rishi mumkin, va uning orqasida qaysi odam yoki qurilma turishini hech narsa demaydi. Unga kirish filtri sifatida munosabatda bo’ling, autentifikatsiya sifatida emas.
Uni so’rov darajasidagi tekshiruvlardan mustaqil tuting. Agar ro’yxat hujumchi bilan holatni o’zgartiradigan oxirgi nuqta orasidagi yagona narsa bo’lsa, bitta noto’g’ri sozlangan marshrut, bitta split-tunnel mijozi yoki bitta qarzga olingan noutbuk nazoratni butunlay olib tashlaydi.
Kutilgan diapazonlardan tashqari rad etishlarni ham yozib boring. Ularning portlashi siz hozir qurgan chegarani kimdir tekshirayotganining eng foydali belgisi, sukunat esa filtrga hech narsa yetib bormayotganining belgisi.
Cookie, kirish va ruxsatni ochiq tuting
Cookie qamrovi natijaning ko’p qismini hal qiladi. Ota-domen cookie fayli admin xostiga yuboriladi, shuning uchun ommaviy saytdagi skript in’ektsiyasi administrator sessiyasi bilan harakat qilishi mumkin; faqat xost uchun cookie bunday qila olmaydi. Faqat xost shaklini afzal ko’ring, Secure xususiyatini qo’shing va platforma qo’llasa __Host- prefiksini ishlating, chunki bu prefiks Secure, Path=/ va Domain xususiyatisizlikni talab qiladi. Cookie idishini emas, javob sarlavhasini o’qing: Set-Cookie: __Host-admin_session=...; Secure; Path=/; HttpOnly; SameSite=Lax, Domain xususiyatisiz. Brauzer Domain li __Host- cookieni tashlab yuboradi, shuning uchun opa-singil xostlarda hali ko’rinadigan cookie prefiks hech qachon qo’llanmaganining isboti.
Keyin ruxsatni serverda, har bir so’rov uchun, har bir admin oxirgi nuqtasida tuting, faqat kirish paytida emas. Ruxsat berilgan tarmoqdan kelgan so’rov ham autentifikatsiya qilinishi va so’rayotgan amali uchun ruxsat olishi kerak; xost nomi harakat qiluvchi shaxs emas. Agar ommaviy va admin ilovalar kirish oqimini yoki sessiyalar omborini baham ko’rsa, bu munosabatni yozib qo’ying, chunki ommaviy sayt xatosidan admin amaliga eng qisqa yo’l shu.
Ajratishdan keyin chegarani qayta tekshiring
Faqat baxtli yo’lni emas, salbiy sinovlarni ham ishga tushiring: tokensiz saytlararo shakl rad etilishi kerak, boshqa sessiya tokeni rad etilishi kerak va hech bir GET holatni o’zgartirmasligi kerak. Dasturchi vositalarida cookie xususiyatlarini tekshiring, mos kelmaydigan so’rovda Origin tekshiruvi ishga tushishini tasdiqlang va filtr ishlashini ko’rish uchun admin xostini VPN diapazonidan tashqaridan sinab ko’ring.
Bularning hech biri admin ilovasining ichidagi XSS nuqsonini yo’q qilmaydi. Alohida xost nomi haqiqiy qiymatga ega brauzer tomonidagi izolyatsiya chegarasi va u xavfsiz bo’lmagan kod ijrosining oldini olishning yoki server tomonidagi so’rovlarni himoya qilishning o’rnini bosmaydi. Ajratishdan keyin ro’yxat ko’ringanidan qisqa: alohida origin, faqat xost uchun cookie fayllari, har bir o’zgarishda token, shaxs sifatida ishonmaydigan kirish filtri va har bir so’rov uchun hal qilinadigan ruxsat.