Админ субдомени CSRFди токтотпойт: ишке киргизер алдында төрт текшерүү
Жаңы хост аты жаңы origin, көбүнчө ошол эле сайт, ошондуктан same-site cookie файлдары жана жөнөкөй формалар андан өтөт. Токендерди, дарбазаны жана авторизацияны текшериңиз.
Админ интерфейсин admin.example.comго которуу чыныгы жакшыртуу: ал админ cookie файлдарын коомдук барактардан алыс кармайт, эки колдонмого өзүнчө кэш берет жана катаалыраак тармактык саясатты бир хост атына багыттоого мүмкүндүк берет. Бирок бул CSRF көзөмөлү эмес жана коомдук сайттын кодун кирген админдин алдында ачык кармоого коопсуз кылбайт. Бөлүү браузер чек деп эсептегенди өзгөртөт, сервер текшергенди эмес, ошондуктан иш бүттү деп айтпас мурун ушул төрт текшерүүнү аткарыңыз.
Origin менен сайтты эки бөлөк сөз катары окуңуз
Origin — схема, хост жана порт, ошондуктан https://www.example.com жана https://admin.example.com ар кандай origin. Сайт SameSite маанисинде схема кошуу каттоого боло турган домен, ошондуктан бул эки хост аты адатта бир сайт. Ушул айырма — бүтүндөй тузак: SameSite атрибуту бир тууган субдомендердин ортосунда жардам бербейт, анткени браузер сурамды такыр эле сайтаралык деп эсептебейт. Админ интерфейсин чыныгы башка каттоого боло турган доменге, мисалы admin-example.netке багыттаңыз, ошондо сурам чыныгы сайтаралык болот, жана дал ошол жерде SameSite=Lax же Strict ишенсе боло турган ишти баштайт.
Муну ой жүгүртүү менен эмес, браузерде текшериңиз.
Коомдук сайтты жүктөңүз, иштеп чыгуучунун куралдарын ачыңыз жана браузер админ хостко багытталган сурамга кайсы cookie файлдарын тиркей турганын караңыз. Эгер cookieде Domain атрибуту жок болсо, ал хостко гана таандык жана өз атында калат; эгер Domain=example.com болсо, ал ар бир тууганга барат, жана жаңы субдомен ошол cookie үчүн эч нерсе берген жок.
Жоопту окууну сурам жөнөтүүдөн бөлүңүз
Бирдей origin саясаты originдердин ортосунда жоопторду окууну чектейт. Ал сурамдын жөнөтүлүшүн токтотпойт жана браузерде бар күбөлүктөрдү форманын алып жүрүүсүнө тоскоол болбойт. Жөнөкөй сурам, форманын мазмун түрү же жөнөкөй GET менен, алдын ала текшерүүсүз жеткирилет; андан кийин CORS чакырган скрипттин жоопту окуй аларын чечет. CSRF толугу менен жөнөтүү тарабында жашайт.
Ошондуктан серверге абалды өзгөртүүчү операциялар үчүн ачык текшерүү керек. Сессияга байланган синхрондоштуруу токени же серверде салыштырылуучу кош жөнөтүү cookieси бул учурду жабат; Origin же Referer салыштыруусун экинчи дарбаза катары кошууга татыктуу, бирок жалгыз эмес, анткени ар бир сурам бул аталышты алып жүрбөйт жана ар бир прокси аны сактабайт. OWASPтын CSRF алдын алуу боюнча нускамасы SameSiteди бир нече катмардын бири деп так ушундан улам эсептейт.
Тармактык дарбаза чындыгында эмнени далилдей турганын чечиңиз
Админ хосттун алдындагы VPN чыгууларынын уруксат тизмеси жакшы көзөмөл жана алсыз инсандык билдирүү. Ал сурам VPN берген даректен келгенин далилдейт, аны ошол чыгуудагы баары бөлүшө алат, жана анын артында кайсы адам же түзмөк турганын айтпайт. Ага кирүү фильтри катары мамиле кылыңыз, аутентификация катары эмес.
Аны сурам деңгээлиндеги текшерүүлөрдөн көз карандысыз кармаңыз. Эгер тизме чабуулчу менен абалды өзгөртүүчү акыркы чекиттин ортосундагы жалгыз нерсе болсо, бир туура эмес конфигурацияланган маршрут, бир split-tunnel кардары же бир карызга алынган ноутбук көзөмөлдү толугу менен жок кылат.
Күтүлгөн диапазондон сырткары баш тартууларды да журналга жазыңыз. Алардын атылышы бирөөнүн жаңы салынган чекти изилдеп жатканынын эң пайдалуу белгиси, ал эми тынчтык фильтрге такыр жетпей жатканынын белгиси.
Cookie файлдарын, кирүүнү жана авторизацияны ачык кармаңыз
Cookie көлөмү натыйжанын көп бөлүгүн чечет. Ата-эне домендин cookieси админ хостко жөнөтүлөт, ошондуктан коомдук сайттагы скрипт киргизүү админдин сессиясы менен аракет кыла алат; хостко гана тиешелүү cookie андай кыла албайт. Хосттун гана формасын тандаңыз, Secure атрибутун кошуңуз жана платформа колдосо __Host- префиксин колдонуңуз, анткени бул префикс Secure, Path=/ жана Domain атрибутунун жоктугун талап кылат. Cookie кутусун эмес, жооптун аталышын окуңуз: Set-Cookie: __Host-admin_session=...; Secure; Path=/; HttpOnly; SameSite=Lax, Domain атрибутусуз. Браузер Domain бар __Host- cookieсин ыргытып салат, ошондуктан бир тууган хосттордо дагы көрүнгөн cookie префикстин эч качан колдонулбаганынын далили.
Андан кийин авторизацияны серверде, ар бир сурам үчүн, ар бир админ акыркы чекитте кармаңыз, кирүү учурунда гана эмес. Уруксат берилген тармактан келген сурам дагы аутентификацияланып, сураган операциясына авторизацияланышы керек; хост аты аракет кылуучу адам эмес. Эгер коомдук жана админ колдонмолору кирүү агымын же сессия кампасын бөлүшсө, ошол байланышты жазып коюңуз, анткени бул коомдук сайттын катасынан админ аракетине чейинки эң кыска жол.
Бөлүүдөн кийин чекти кайра текшериңиз
Терс тесттерди иштетиңиз, жагымдуу жолду гана эмес: токенсиз сайтаралык форма четке кагылышы керек, башка сессиянын токени четке кагылышы керек жана эч бир GET абалды өзгөртпөшү керек. Cookie атрибуттарын иштеп чыгуучунун куралдарында текшериңиз, Origin текшерүүсүнүн дал келбеген сурамда иштээрин ырастаңыз жана фильтрдин иштешин көрүү үчүн админ хостту VPN диапазонунун сыртынан сынап көрүңүз.
Булардын эч бири админ колдонмосунун ичиндеги XSS кемчилигин жок кылбайт. Өзүнчө хост аты чыныгы баалуулугу бар браузер тарабындагы обочолонуу чеги жана ал кооптуу эмес коддун аткарылышын алдын алуунун же сервер тарабындагы сурамдарды коргоонун ордун баспайт. Бөлүүдөн кийин тизме көрүнгөндөн кыска: өзүнчө origin, хостко гана cookie файлдары, ар бир өзгөрүүдө токен, инсандык катары ишенилбеген кирүү фильтри жана ар бир сурам үчүн чечилүүчү авторизация.