Инфосолюшн ХХК · 2-р сар 10, 2022 · 10 үзсэн
CORS буюу Cross-Origin Resource Sharing-ыг буруу тохируулсанаар ямар асуудал үүсдэг вэ гэдгийг тайлбарлахын өмнө CORS болон SOP гэж юу вэ гэдгийг ойлгоцгооё.
Бидний одоогийн ашиглаж байгаа ихэнх веб хөтчүүд default-аар SOP /Same-Origin Policy/-ыг мөрдүүлдэг. SOP нь энгийнээр: та веб хөтчөөсөө https://hello.mn гэсэн вебрүү хандан өөрийн эрхээрээ нэвтрэн үйлчилгээ авч байхад өөр нэг tab дээр орсон байгаа http://goodbye.mn сайт дэх javascript код hello.mn-рүү хандалт хийх, ирсэн өгөгдөлрүү хандах боломжгүй байхаар зохицуулдаг дүрэм гэсэн үг юм. Тэгэхээр веб хөтөч нь SOP-ын дүрмийн дагуу протокол /https or http/, домайн, порт гэсэн 3 зүйл бүгд ижил байгаа эсэхийг шалгаад ижил бол resource /image, video, script, data/-руу хандахыг зөвшөөрдөг, үгүй бол блоклодог байхнээ.
Гэтэл орчин үеийн вебүүдийн шаардлага нэмэгдэж https://hello.mn сайтад зочилсны дараа өөрийн эрхээрээ нэвтрэхэд https://auth.hello.mn-рүү хандалт хийн хэрэглэгчээ танидаг, https://api.hello.mn-рүү хандалт хийн өгөгдлөө авах, боловсруулах шаардлагууд үүссэн бөгөөд SOP-ын ижил домайнтай байх гэдэг default дүрмийг зөрчих шаардлага үүсэхэд CORS-ыг ашиглах болсон.
CORS нь хэрхэн ажилладаг вэ гэвэл https://hello.mn дэх скриптээс https://auth.hello.mn-рүү хандалт хийхэд
Дээрх жишээний `Access-Control-Allow-Credentials: true` нь hello.mn буюу Access-Control-Allow-Origin-аар дамжуулан зөвшөөрөл өгсөн домайнд веб хөтөч дээр хадгалагдаж байгаа auth.hello.mn домайнд харгалзах Cookie-г ашиглах зөвшөөрлийг олгож байгаа гэсэн үг юм.
За тэгэхээр CORS-ыг буруу тохируулснаар ямар асуудлууд үүсэж болохыг NodeJS-ын жишээн дээр авч үзье. Зарим хөгжүүлэгчид CORS-ын ач холбогдлыг нарийн ойлгоогүйгээсээ болоод browser талд алдаа гарч HTTP request илгээгдэхгүй үед CORS-ын Origin-ыг '*' буюу wildcard-аар нь тохируулчихдаг.
Дээрх 3 жишээтэй төстэй байдлаар код бичигсэн бол https://hello.mn дэх javascript-ээс https://auth.hello.mn-руу HTTP хүсэлт илгээхэд HTTP Response header-ын утга бүгд дараах байдалтай байна.
Ингэснээр таны вебийн resource-руу дурын домайнаас хандалт хийх боломжтой болгож байгаа бөгөөд энэ сул талыг ашиглан CSRF /Cross Site Request Forgery/ халдлага хийн нууц мэдээлэл хулгайлах боломжтой. CSRF халдлага нь халдагч этгээд хэрэглэгчийг хууран өөрийн бэлдсэн хортой скрипт бүхий вебрүү хандуулж хэрэглэгчийн browser дээрх зэргэлдээ вебээс өгөгдөл хулгайлах, имэйл солих, нууц үг өөрчлөх гэх мэт үйлдэл хийлгэж болдог халдлага юм.
Илүү ойлгомжтой болгох үүднээс өөрсдийн жишээн дээрээ авч үзье.
api.hello.mn/user/chatHistory endpoint нь хэрэглэгчийн бичсэн чатын түүхийг харуулдаг бөгөөд вебийн backend хөгжүүлэгч өмнөх жишээ кодон дээр харуулсан шиг эмзэг байдал үүсгэхээр код бичсэн бол
Нэгэнт CORS-ыг буруу тохируулсанаар ямар нөлөөтэй гэдгийг нь ойлгосон учраас нэмэлтээр Express дээрх 2 insecure coding practice-ын талаар авч үзье
Нүүр зургийг: https://portswigger.net/cms/images/75/7a/8a2462c12947-article-how-to-be-web-security-researcher.png
Танд тохиромжтой шийдлийг бид санал болгоно.