Админ интерфэйсийг admin.example.com руу зөөх нь жинхэнэ сайжруулалт: админ күүкийг нийтэд нээлттэй хуудсуудаас хол байлгаж, хоёр аппликейшнд тусдаа кэш өгч, илүү хатуу сүлжээний бодлогыг нэг хостны нэр рүү чиглүүлэх боломж олгоно. Гэхдээ энэ нь CSRF хяналт биш бөгөөд нийтэд нээлттэй сайтын кодыг нэвтэрсэн админы өмнө нээлттэй байлгахад аюулгүй болгохгүй. Тусгаарлалт нь хөтөч хил гэж үздэгийг өөрчилдөг, сервер шалгадаг зүйлийг биш, тиймээс ажил дууссан гэж хэлэхийн өмнө эдгээр дөрвөн шалгалтыг хийгээрэй.

Origin ба сайтыг хоёр өөр үг мэт уншина уу

Origin бол схем, хост, порт, тиймээс https://www.example.com ба https://admin.example.com нь өөр origin. Сайт SameSite утгаар схем дээр бүртгэгдэх домэйн нэмсэн нь, тиймээс энэ хоёр хостны нэр ихэвчлэн нэг сайт байдаг. Энэ ялгаа нь бүх урхи: SameSite шинж чанар нь ах дүү дэд домэйнүүдийн хооронд туслахгүй, учир нь хөтөч хүсэлтийг огт сайт хоорондын гэж үздэхгүй. Админ интерфэйсийг үнэхээр өөр бүртгэгдэх домэйн руу, жишээлбэл admin-example.net руу чиглүүлээрэй, тэгвэл хүсэлт үнэхээр сайт хоорондын болж, яг тэнд SameSite=Lax эсвэл Strict итгэж болох ажлаа эхэлдэг.

Үүнийг таамаглахын оронд хөтөч дээр туршаарай.

Нийтэд нээлттэй сайтыг ачаалж, хөгжүүлэгчийн хэрэгслүүдийг нээж, хөтөч админ хост руу чиглэсэн хүсэлтэд ямар күүки хавсаргаж байгааг хараарай. Күүкид Domain шинж чанар байхгүй бол зөвхөн хостод хамаарах бөгөөд өөрийн нэр дээрээ үлдэнэ; хэрэв Domain=example.com агуулж байвал ах дүү бүр рүү явж, шинэ дэд домэйн тэр күүкид юу ч өгөөгүй.

Хариултыг унших ба хүсэлт илгээхийг салгана уу

Нэг origin бодлого нь origin хооронд хариулт уншихыг хязгаарладаг. Энэ нь хүсэлт илгээхийг зогсоохгүй бөгөөд хөтөч аль хэдийн эзэмшиж буй итгэмжлэлийг маягт зөөхийг хориглохгүй. Энгийн хүсэлт, маягтын агуулгын төрөл эсвэл энгийн GET-тэй нь урьдчилсан шалгалтгүйгээр хүргэгдэнэ; дараа нь CORS дуудаж буй скрипт хариултыг уншиж болох эсэхийг шийднэ. CSRF бүхэлдээ илгээх тал дээр амьдардаг.

Тиймээс серверт төлөв өөрчлөх үйлдлүүдэд тодорхой шалгалт хэрэгтэй. Сессэд холбогдсон синхрончлолын токен, эсвэл сервер дээр харьцуулдаг давхар илгээлтийн күүки энэ тохиолдлыг хамарна; Origin эсвэл Referer харьцуулалтыг хоёр дахь гарц болгон нэмэх нь үнэ цэнэтэй боловч цорын ганц гарц болгож болохгүй, учир нь хүсэлт бүр толгойг зөөдөггүй, прокси бүр хадгалдаггүй. OWASP-ын CSRF-ээс сэргийлэх заавар SameSite-г хэд хэдэн давхаргын нэг гэж үздэг нь яг энэ шалтгаанаар.

Сүлжээний гарц юуг үнэхээр нотолж байгааг шийдээрэй

Админ хостны өмнөх VPN гарах гарцын зөвшөөрөгдсөн жагсаалт нь сайн хяналт ба сул таних мэдэгдэл. Хүсэлт VPN-ийн өгдөг хаягаас ирснийг нотолдог, тэр гарц дээрх бүх хүн үүнийг хуваалцаж болно, мөн түүний ард ямар хүн эсвэл төхөөрөмж байгааг юу ч хэлэхгүй. Үүнийг орох шүүлтүүр гэж үзээрэй, таних баталгаажуулалт гэж биш.

Үүнийг хүсэлтийн түвшний шалгалтуудаас хамааралгүй байлгаарай. Хэрэв жагсаалт нь халдагч ба төлөв өөрчлөх эцсийн цэгийн хоорондох цорын ганц зүйл бол, нэг буруу тохируулсан зам, нэг split-tunnel клиент эсвэл нэг зээлсэн зөөврийн компьютер хяналтыг бүрмөсөн арилгана.

Хүлээгдэж буй хүрээнээс гадуурх татгалзлыг ч бүртгээрэй. Тэдний тэсрэлт нь таны саяхан босгосон хилийг хэн нэгэн шалгаж байгаагийн хамгийн ашигтай дохио, харин чимээгүй байдал нь шүүлтүүрт юу ч хүрэхгүй байгаагийн дохио.

Күүки, нэвтрэлт, зөвшөөрлийг тодорхой байлгаарай

Күүкийн хүрээ үр дүнгийн ихэнхийг шийднэ. Эх домэйны күүки админ хост руу илгээгддэг тул нийтэд нээлттэй сайт дахь скриптийн шургуулга админы сессээр ажиллаж чадна; зөвхөн хостод хамаарах күүки чадахгүй. Зөвхөн хостод хамаарах хэлбэрийг сонгож, Secure шинж чанарыг нэмж, платформ дэмжвэл __Host- угтварыг ашиглаарай, учир нь энэ угтвар нь Secure, Path=/ болон Domain шинж чанаргүй байхыг шаарддаг. Күүкийн сав биш, хариултын толгойг уншина уу: Set-Cookie: __Host-admin_session=...; Secure; Path=/; HttpOnly; SameSite=Lax, Domain шинж чанаргүйгээр. Хөтөч Domain-той __Host- күүкийг хаядаг тул ах дүү хостуудад одоо ч харагдаж буй күүки нь угтвар хэзээ ч хэрэглэгдээгүйн баталгаа.

Дараа нь зөвшөөрлийг сервер дээр, хүсэлт бүрд, админ эцсийн цэг бүрд байлгаарай, зөвхөн нэвтрэх үед биш. Зөвшөөрөгдсөн сүлжээнээс ирсэн хүсэлт ч баталгаажиж, хүсч буй үйлдэлдээ зөвшөөрөгдөх ёстой; хостны нэр нь үйлдэгч биш. Хэрэв нийтэд нээлттэй ба админ аппликейшн нэвтрэх урсгал эсвэл сессийн агуулахыг хуваалцдаг бол тэр харилцааг бичиж үлдээгээрэй, учир нь энэ нь нийтэд нээлттэй сайтын алдаанаас админ үйлдэл хүртэлх хамгийн богино зам.

Тусгаарласны дараа хилийг дахин шалгаарай

Зөвхөн азтай зам биш, сөрөг тестүүдийг ажиллуулаарай: токенгүй сайт хоорондын маягт татгалзагдах ёстой, өөр сессийн токен татгалзагдах ёстой, ямар ч GET төлөвийг өөрчлөх ёсгүй. Хөгжүүлэгчийн хэрэгсэлд күүкийн шинж чанарыг шалгаж, тохирохгүй хүсэлтэд Origin шалгалт ажиллаж байгааг баталж, шүүлтүүрийн ажлыг харахын тулд админ хост руу VPN-ийн хүрээнээс гаднаас оролдоорой.

Эдгээрийн аль нь ч админ аппликейшн доторх XSS алдааг арилгахгүй. Тусдаа хостны нэр нь бодит үнэ цэнэтэй хөтчийн талын тусгаарлалтын хил бөгөөд аюулгүй бус код гүйцэтгэхийг урьдчилан сэргийлэх эсвэл серверийн талын хүсэлтийн хамгаалалтыг орлохгүй. Тусгаарласны дараа жагсаалт харагдахаас богино: өөр origin, зөвхөн хостод хамаарах күүки, өөрчлөлт бүрд токен, таних гэж итгэдэггүй орох шүүлтүүр, хүсэлт бүрд шийдэгдэх зөвшөөрөл.

Холбоотой нийтлэлүүд