Veb-ilovalar


Veb-ilovalar Internetga kirishdan tortib maysa o‘radigan mashinangizni masofadan boshqarishgacha — qiladigan deyarli barcha ishlarimizning ajralmas qismidir. Ushbu kirish darsida veb-ilovalar xavfsizligi asoslarini ko‘rib chiqamiz.


ULASHISH

HTTP protokoli

HTTP — brauzerlarimiz va ilovalarimizga HTML ("Hyper Text Markup Language"), CSS ("Cascading Style Sheets"), rasmlar va videolar kabi kontentni qabul qilish imkonini beruvchi tashuvchi protokol.


URL’lar, so‘rov parametrlari (Query Parameters) va sxema (Scheme)

Veb-ilovaga kirish uchun URL’dan ("Uniform Resource Locator") foydalanamiz, masalan: https://www.google.com/search?q=w3schools+cyber+security&ie=UTF-8

google.com’ga olib boruvchi URL domen, murojaat qilinayotgan skript va so‘rov parametrlaridan (Query Parameters) iborat.

Biz murojaat qilayotgan skript /search deb ataladi. / belgisi skript serverda fayllar taqdim etiladigan eng yuqori katalogda joylashganini bildiradi. ? belgisi skriptga beriladigan kirish parametrlarini ko‘rsatadi, & esa turli kirish parametrlarini bir-biridan ajratadi. Bizning URL’dagi kirish parametrlari:

  • q, qiymati w3schools cyber security
  • ie, qiymati UTF-8

Bu kirish qiymatlarining ma’nosini veb-serverdagi ilova belgilaydi.

Ba’zan faqat / yoki /? belgisini ko‘rasiz, bu esa ushbu manzilga javob berish uchun skript sozlanganini bildiradi. Odatda bu skript, agar aniq skript ko‘rsatilmagan bo‘lsa, barcha so‘rovlarni qabul qiluvchi index fayliga o‘xshash bo‘ladi.

Sxema (Scheme) qaysi protokoldan foydalanishni belgilaydi. Bizning holatda bu URL’ning birinchi qismi: https. Agar URL’da sxema ko‘rsatilmagan bo‘lsa, nimadan foydalanishni ilovaning o‘zi hal qiladi. Sxemalar butun bir qator protokollarni o‘z ichiga olishi mumkin, masalan:

  • HTTP
  • HTTPS
  • FTP
  • SSH
  • SMB

HTTP sarlavhalari (headers)

HTTP protokoli ko‘plab sarlavhalardan foydalanadi: ularning ba’zilari ilovaning o‘ziga xos, boshqalari esa aniq belgilangan va texnologiya tomonidan qabul qilingan.

http://google.com manziliga so‘rov misoli

GET /search?q=w3schools+cyber+security&ie=UTF-8 HTTP/1.1 Host: google.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8 Referer: https://w3schools.com/ Accept-Encoding: gzip, deflate Cookie: cookie1=value1;cookie2=value2

So‘rov sarlavhasi mijoz maqsad veb-serverda nimani bajarmoqchi ekanini belgilaydi. Unda, shuningdek, mijoz siqishni qabul qilish-qilmasligi, qanday turdagi mijoz murojaat qilayotgani va server mijozga taqdim etishni aytgan har qanday cookie’lar haqida ma’lumotlar mavjud. HTTP so‘rov sarlavhalari quyida tushuntirilgan:

Sarlavha (header) Izoh
GET /search... HTTP/1.1 GET — ilovaga murojaat qilish uchun foydalanayotgan fe’limiz (verb). U HTTP fe’llari bo‘limida batafsil tushuntirilgan. Shuningdek, yo‘l va so‘rov parametrlarini hamda HTTP versiyasini ko‘ramiz
Host: google.com Bu sarlavha biz foydalanmoqchi bo‘lgan maqsad xizmatni ko‘rsatadi. VHOSTS bo‘limida tushuntirilganidek, bitta serverda bir nechta xizmat bo‘lishi mumkin.
User-Agent Mijoz ilovasi, ya’ni ko‘p hollarda brauzer, o‘zini versiyasi, dvigateli va operatsion tizimi bilan tanishtirishi mumkin
Accept Mijoz qanday kontentni qabul qila olishini belgilaydi
Referer: https://w3schools.com/ Agar mijoz boshqa veb-saytdagi havolani bosgan bo‘lsa, Referer sarlavhasi mijoz qayerdan kelganini bildirish uchun ishlatiladi
Accept-Encoding: gzip, deflate Kontentni siqish yoki kodlash mumkinmi? Bu biz nimani qabul qila olishimizni belgilaydi
Cookie Cookie’lar — server avvalgi javoblarda yuborgan qiymatlar bo‘lib, mijoz ularni har bir keyingi so‘rovda qaytarib yuboradi. Holat (State) bo‘limida batafsil tushuntirilgan

Ushbu so‘rovga server sarlavhalar va kontent bilan javob qaytaradi. Sarlavhalar misoli quyida keltirilgan:

HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: <cookie value> <website content>

Javob sarlavhasi va kontent brauzerimizda nimani ko‘rishimizni belgilaydi. HTTP javob sarlavhalari quyidagicha tushuntiriladi:

Sarlavha (header) Izoh
HTTP/1.1 200 OK HTTP javob kodi. HTTP javob kodlari bo‘limida batafsil tushuntirilgan
Content-Type: text/html Qaytarilayotgan kontent turini belgilaydi, masalan, HTML, JSON yoki XML
Set-Cookie: Mijoz eslab qolishi va keyingi so‘rovda qaytarishi kerak bo‘lgan har qanday maxsus qiymatlar


HTTP fe’llari (verbs)

Veb-ilovaga murojaat qilinganda mijozga veb-ilovaga ma’lumotlarni qanday yuborish kerakligi ko‘rsatiladi. Ilova qabul qilishi mumkin bo‘lgan ko‘plab fe’llar mavjud.

Fe’l Qo‘llanilishi
GET Odatda so‘rov parametrlari (Query Parameters) orqali qiymatlarni olish uchun ishlatiladi
POST Veb-serverga yuborilgan so‘rov tanasidagi (body) qiymatlar orqali skriptga ma’lumot yuborish uchun ishlatiladi. Odatda katta hajmdagi ma’lumotlarni yaratish, yuklash yoki yuborishni o‘z ichiga oladi
PUT Ko‘pincha veb-serverga ma’lumotlarni yuklash yoki yozish uchun ishlatiladi
DELETE O‘chirilishi kerak bo‘lgan resursni ko‘rsatadi
PATCH Resursni yangi qiymat bilan yangilash uchun ishlatilishi mumkin

Bular veb-ilovaning talabiga ko‘ra ishlatiladi. RESTful (REST) veb-xizmatlar backend’da nima qilinishi kerakligini belgilash uchun HTTP fe’llarining to‘liq to‘plamidan foydalanishda ayniqsa yaxshi.


HTTP javob kodlari

Veb-serverda ishlayotgan ilova server tomonida nima sodir bo‘lganiga qarab turli kodlar bilan javob berishi mumkin. Quyida veb-server mijozga qaytaradigan va xavfsizlik mutaxassislari bilishi kerak bo‘lgan keng tarqalgan javob kodlari keltirilgan:

Kod Izoh
200 Ilova odatdagidek javob qaytardi
301 Server mijozdan u murojaat qilishi kerak bo‘lgan yangi manzilga yo‘naltirishni doimiy eslab qolishni so‘raydi
302 Vaqtinchalik yo‘naltirish. Mijoz bu javobni saqlashi shart emas
400 Mijoz noto‘g‘ri so‘rov yubordi
403 Mijozga bu resursga kirishga ruxsat berilmagan. Avtorizatsiya talab qilinadi
404 Mijoz mavjud bo‘lmagan resursga murojaat qilishga urindi
500 Server so‘rovni bajarishga urinishda xatolikka uchradi

REST

REST xizmatlari, ba’zan RESTful xizmatlar deb ham ataladi, veb-ilovadan foydalanishni qulaylashtirish uchun HTTP fe’llari va HTTP javob kodlarining to‘liq imkoniyatlaridan foydalanadi. RESTful xizmatlar veb-ilovada nima sodir bo‘lishini aniqlash uchun ko‘pincha URL qismlaridan so‘rov parametri sifatida foydalanadi. REST odatda API’lar ("Application Programming Interfaces" — dasturiy ilovalar interfeyslari) tomonidan ishlatiladi.

REST URL’lari URL’ning turli elementlariga asoslangan holda funksionallikni ishga tushiradi.

REST URL misoli: http://example.com/users/search/w3schools

Bu URL funksionallikni so‘rov parametrlari o‘rniga URL qismi sifatida ishga tushiradi. URL’ni quyidagicha tahlil qilishimiz mumkin:

Parametr Izoh
users Funksionallikning users qismiga murojaat qilish
search Qidiruv funksiyasiga murojaat qilish
w3schools Qidirilayotgan foydalanuvchi

Seanslar va holat (Sessions & State)

HTTP’da serverning qaytib kelgan tashrif buyuruvchini aniqlashi uchun o‘rnatilgan usul yo‘q. Veb-server foydalanuvchini aniqlashi uchun har bir so‘rovda mijozga va mijozdan maxfiy qiymat uzatilishi kerak. Bu odatda sarlavhalardagi cookie’lar orqali amalga oshiriladi, biroq GET va POST parametrlari yoki boshqa sarlavhalar orqali uzatish kabi boshqa usullar ham keng tarqalgan. Holatni GET parametrlari orqali uzatish tavsiya etilmaydi, chunki bunday parametrlar ko‘pincha serverda yoki proksi kabi oraliq tizimlarda jurnalga yoziladi.

HTTP Sessions

Quyida veb-serverdagi ilovaga seanslar va holatni boshqarish imkonini beruvchi keng tarqalgan cookie misollari keltirilgan:

  • PHPSESSID
  • JSESSIONID
  • ASP.NET_SessionID

Bu qiymatlar serverdagi muayyan holatni ifodalaydi, u ko‘pincha seans (session) deb ataladi. Bu holat quyidagilarni ifodalaydi:

  • Qaysi foydalanuvchi sifatida tizimga kirganingiz
  • Imtiyozlar va ruxsatlar

Mijozga yuboriladigan seans qiymatini boshqalar osongina taxmin qila olmasligi yoki boshqa yo‘l bilan aniqlay olmasligi muhim. Agar ular buni qila olsa, hujumchi veb-ilovada o‘zini boshqa foydalanuvchilar sifatida ko‘rsatishi mumkin bo‘lardi.

Holatni mijoz tomonida ham saqlash mumkin. Bunda server barcha holatlarni mijozga yuboradi va mijozning barcha elementlarni qaytarib yuborishiga tayanadi. Bunday yechimlar mijoz taqdim etayotgan holatning yaxlitligini tekshirish uchun shifrlashga tayanadi. Bundan foydalanadigan yechimlarga misollar quyida keltirilgan:

  • JWT ("JSON Web Tokens")
  • ASP.Net ViewState

Siz bu darsni o‘qish uchun cookie’lardan foydalanyapsiz! Bu cookie’larni veb-brauzeringizda dasturchi vositalarini (developer tools) ochib tekshirishingiz mumkin. Buning uchun brauzerda F12 tugmasini bosing — dasturchi vositalari oynasi ochiladi. Bu oynada cookie’laringiz saqlanadigan to‘g‘ri joyni topa olishingiz kerak.

Developer Console

Google Chrome’da cookie’lar yuqoridagi Application yorlig‘ida topildi.

Eslatma: Nima uchun skrinshotda cookie’lar ularni o‘qiy olmasligingiz uchun yashirilganini tushunib yetasizmi?

Virtual xostlar

Bitta veb-server virtual xostlar (Virtual Hosts) orqali ko‘plab ilovalarga xizmat ko‘rsatishi mumkin, ular ko‘pincha qisqacha Vhosts deb ataladi. Boshqa virtual xostlarga kirishni ta’minlash uchun veb-server odatda mijoz so‘rovidagi Host sarlavhasini o‘qiydi va shu qiymatga asoslanib so‘rovni kerakli ilovaga yuboradi.

Virtual Hosts


URL kodlash (URL Encoding)

Ilova server va mijoz o‘rtasida kontentni xavfsiz uzatishi uchun ba’zi belgilar protokolga ta’sir qilmasligi uchun kodlanishi kerak. Aloqaning yaxlitligini saqlash uchun URL kodlash ishlatiladi.

URL kodlash xavfli belgilarni % belgisi va ikkita o‘n oltilik raqam bilan almashtiradi. Masalan:

  • Foiz belgisi %25 bilan almashtiriladi
  • Bo‘sh joy %20 bilan almashtiriladi
  • Qo‘shtirnoq %22 bilan almashtiriladi

Matnni tahlil qilish va URL’ni dekodlash kabi amallarni bajarish uchun ajoyib vosita — CyberChef. Uni brauzeringizda shu yerda sinab ko‘rishingiz mumkin: https://gchq.github.io/CyberChef/

Eslatma: Cyber Chef bilan tajriba qilib ko‘ring va URL kodlangan belgilardagi quyidagi xabarda nima yozilganini aniqlay olasizmi, tekshiring: %48 %65 %6c %6c %6f %20 %64 %65 %61 %72 %20 %77 %33 %73 %63 %68 %6f %6f %6c %73 %20 %73 %74 %75 %64 %65 %6e %74 %2e %20 %48 %6f %70 %65 %20 %79 %6f %75 %20 %61 %72 %65 %20 %6c %65 %61 %72 %6e %69 %6e %67 %20 %73 %6f %6d %65 %74 %68 %69 %6e %67 %20 %74 %6f %64 %61 %79 %21

JavaScript

Dinamik kontentni qo‘llab-quvvatlash uchun brauzerlar JavaScript skript tilidan foydalanadi. Bu dasturchilarga mijoz tomonida ishlaydigan yechimlarni dasturlash imkonini beradi va veb-kontentni yanada interaktiv va "jonli" qiladi.

JavaScript, shuningdek, veb-ilovalarga va brauzerlar kabi mijoz ilovalariga qarshi ko‘plab hujumlarda ishtirok etadi.


TLS yordamida shifrlash

HTTP protokoli uzatilayotgan ma’lumotlarni shifrlashni qo‘llab-quvvatlamaydi, shuning uchun shifrlashni qo‘llab-quvvatlash maqsadida HTTP atrofiga qobiq (wrapper) qo‘shiladi. Bu HTTP’dan keyin keladigan S harfi bilan, ya’ni HTTPS ko‘rinishida ko‘rsatiladi.

Ilgari shifrlash uchun SSL ("Secure Sockets Layer") ishlatilgan, biroq u eskirgan deb e’lon qilingan. Buning o‘rniga shifrlashni ta’minlash uchun odatda TLS ("Transport Layer Security") ishlatiladi.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!