Veb-ilovalar xavfsizligini ta'minlash uchun CORSni tushunish va sozlash. Xalqaro dasturchilar uchun eng yaxshi amaliyotlar, xavfsizlik oqibatlari va amaliy misollar.
Manbalarni o'zaro ulashish (CORS): Konfiguratsiya va Xavfsizlik
Internetning o'zaro bog'langan dunyosida veb-ilovalar ko'pincha turli manbalarda joylashgan resurslar bilan o'zaro aloqada bo'ladi. Biroq, bu o'zaro ta'sir jiddiy xavfsizlik muammosini keltirib chiqaradi. Manbalarni o'zaro ulashish (CORS) - bu bir manbadan yuklangan veb-sahifaning boshqa manbadan kelgan resurslar bilan qanday o'zaro ta'sir o'tkazishini tartibga soluvchi muhim mexanizmdir. Ushbu qo'llanma veb-dasturchilarning global auditoriyasi uchun mo'ljallangan CORSning konfiguratsiyasi, xavfsizlik oqibatlari va eng yaxshi amaliyotlarini o'rganib, uning keng qamrovli sharhini taqdim etadi.
CORS Asoslarini Tushunish
CORSni tushunish uchun avvalo 'manba' tushunchasini aniqlab olishimiz kerak. Manba protokol (masalan, http, https), domen (masalan, example.com) va port (masalan, 80, 443) birikmasi bilan aniqlanadi. Agar ushbu uch komponentdan birortasi farq qilsa, manba boshqa hisoblanadi. Masalan, http://example.com
va https://example.com
bir xil domenga ishora qilsa ham, ular turli manbalardir.
CORS veb-brauzerlar tomonidan amalga oshirilgan xavfsizlik mexanizmidir. U veb-sahifalarning veb-sahifani taqdim etgan domendan boshqa domenga so'rovlar yuborishini cheklaydi. Ushbu cheklov zararli veb-saytlarning boshqa manbaga ruxsatsiz so'rovlar yuborishini, potentsial ravishda maxfiy ma'lumotlarga kirishini yoki foydalanuvchi nomidan istalmagan harakatlarni amalga oshirishini oldini oladi. CORS ushbu cheklovni yumshatish uchun boshqariladigan mexanizmni taqdim etadi.
CORSda HTTP Sarlavhalarining Roli
CORS manbalararo so'rovlarni boshqarish uchun bir qator HTTP sarlavhalaridan foydalanadi. Brauzer va server o'rtasida almashinadigan ushbu sarlavhalar manbalararo so'rovga ruxsat berilganligini belgilaydi. Mana eng muhim sarlavhalardan ba'zilari:
Origin
: Brauzer ushbu sarlavhani so'rovga qo'shib, so'rov yuborayotgan veb-sahifaning manbasini bildiradi.Access-Control-Allow-Origin
: Server ushbu sarlavhani javobga qo'shib, qaysi manbalarga resursga kirishga ruxsat berilganligini ko'rsatadi. Bu aniq bir manba (masalan,Access-Control-Allow-Origin: https://example.com
) yoki har qanday manbaga ruxsat beruvchi yulduzcha belgisi (Access-Control-Allow-Origin: *
) bo'lishi mumkin.Access-Control-Allow-Methods
: Server ushbu sarlavhani qo'shib, manbalararo so'rov uchun ruxsat etilgan HTTP usullarini (masalan, GET, POST, PUT, DELETE) ro'yxatini beradi.Access-Control-Allow-Headers
: Server ushbu sarlavhani qo'shib, manbalararo so'rovda ishlatilishi mumkin bo'lgan HTTP sarlavhalari ro'yxatini beradi.Access-Control-Allow-Credentials
: Agar bu sarlavhatrue
ga o'rnatilgan bo'lsa, bu brauzer so'rovga hisob ma'lumotlarini (masalan, cookie-fayllar, avtorizatsiya sarlavhalari) kiritishi kerakligini bildiradi.Access-Control-Max-Age
: Ushbu sarlavha brauzer oldindan so'rov (preflight) natijasini soniyalarda qancha vaqt keshlashi mumkinligini ko'rsatadi. Bu oldindan so'rovlar sonini kamaytirish orqali ishlash samaradorligini oshirishi mumkin.
CORS So'rov Turlari
CORS so'rovlarining ikki asosiy turi mavjud:
- Oddiy So'rovlar: Ushbu so'rovlar ma'lum mezonlarga javob beradi va oldindan so'rovni talab qilmaydi. Oddiy so'rovlar quyidagi xususiyatlarni o'z ichiga oladi:
- Usul GET, HEAD yoki POST usullaridan biri.
- Faqat ruxsat etilgan sarlavhalar:
Accept
Accept-Language
Content-Language
Content-Type
(application/x-www-form-urlencoded
,multipart/form-data
yokitext/plain
qiymatlari bilan)
- Oldindan So'rovli (Preflighted) So'rovlar: Bu so'rovlar murakkabroq bo'lib, haqiqiy so'rov yuborilishidan oldin oldindan so'rovni talab qiladi. Oldindan so'rov - bu brauzer tomonidan serverga haqiqiy so'rovni yuborish xavfsiz yoki yo'qligini aniqlash uchun yuboriladigan HTTP OPTIONS so'rovidir. Bu so'rov oddiy so'rov mezonlariga mos kelmaganda zarur bo'ladi. Oldindan so'rov
Origin
,Access-Control-Request-Method
vaAccess-Control-Request-Headers
sarlavhalarini o'z ichiga oladi, server ulardan haqiqiy so'rovga ruxsat berilganligini aniqlash uchun foydalanadi.
Serverda CORSni Sozlash
CORS konfiguratsiyasi asosan server tomonida amalga oshiriladi. Server manbalararo so'rovlarga ruxsat berish uchun o'z javoblarida tegishli HTTP sarlavhalarini yuborishi kerak. Muayyan amalga oshirish ishlatilayotgan server texnologiyasiga bog'liq (masalan, Express bilan Node.js, Django/Flask bilan Python, Spring Boot bilan Java, Laravel bilan PHP).
Misol: Express bilan Node.js
Quyida Express bilan Node.js da cors
middleware yordamida CORSni qanday sozlash misoli keltirilgan:
const express = require('express');
const cors = require('cors');
const app = express();
// Muayyan manbadan keladigan so'rovlarga ruxsat berish uchun CORSni sozlash
const corsOptions = {
origin: 'https://allowed-origin.com',
methods: 'GET,POST,PUT,DELETE',
credentials: true,
optionsSuccessStatus: 200 // ba'zi eski brauzerlar (IE11, turli SmartTVlar) 204 status kodida xatolik berishi mumkin
};
app.use(cors(corsOptions));
app.get('/api/data', (req, res) => {
res.json({ message: 'Serverdan ma\'lumotlar' });
});
app.listen(3000, () => {
console.log('Server 3000-portda ishlamoqda');
});
Ushbu misolda server https://allowed-origin.com
manbasidan ma'lum usullar yordamida so'rovlarni qabul qilish uchun sozlangan. credentials: true
ga ruxsat berish cookie-fayllar va avtorizatsiya sarlavhalaridan foydalanish imkonini beradi, bu esa xavfsizlikni yanada oshiradi. optionsSuccessStatus: 200
dan foydalanish eski brauzerlar bilan moslashuvchanlik uchun yaxshi amaliyotdir.
Misol: Flask bilan Python
Quyida Flask bilan Python da Flask-CORS kutubxonasidan foydalanib CORSni sozlash misoli keltirilgan:
from flask import Flask, jsonify
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "https://allowed-origin.com"}})
@app.route('/api/data')
@cross_origin(origin='https://allowed-origin.com',headers=['Content-Type','Authorization'])
def get_data():
return jsonify({'message': 'Serverdan ma\'lumotlar'})
if __name__ == '__main__':
app.run(debug=True)
Ushbu Flask misoli Flask-CORS kengaytmasidan foydalanadi, bu esa CORS sozlamalarini osonlikcha sozlash imkonini beradi. Biz muayyan marshrutlar uchun ruxsat etilgan manba va sarlavhalarni belgilashimiz mumkin, bu esa moslashuvchanlik va xavfsizlikni oshiradi.
Misol: Spring Boot bilan Java
Quyida Spring Boot da CORSni sozlash misoli keltirilgan:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("https://allowed-origin.com"); // Muayyan manbaga ruxsat berish
config.addAllowedHeader("*"); // Barcha sarlavhalarga ruxsat berish
config.addAllowedMethod("*"); // Barcha usullarga ruxsat berish
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
Ushbu misol, Spring Boot yordamida, CORS filtrining batafsil konfiguratsiyasini taklif etadi. U muayyan manba va boshqa usullarga ruxsat beradi. Bunday sozlama xavfsizlikni va manbalararo so'rovlar ustidan nazoratni yaxshilaydi.
CORSning Xavfsizlik Oqibatlari
CORS, muhim funksionallikni ta'minlash bilan birga, agar to'g'ri sozlanmagan bo'lsa, potentsial xavfsizlik xatarlarini ham keltirib chiqaradi. Ushbu xatarlarni tushunish va ularni yumshatish uchun eng yaxshi amaliyotlarni qo'llash juda muhimdir.
1. Haddan Tashqari Ruxsat Beruvchi Konfiguratsiya (Access-Control-Allow-Origin uchun * dan foydalanish)
Access-Control-Allow-Origin: *
dan foydalanish odatda ishlab chiqarish muhitida tavsiya etilmaydi. U har qanday manbadan so'rovlarga ruxsat bersa-da, bu amaliyot sizning API-ingizni har qanday veb-saytdan ruxsatsiz kirishga ochib beradi. Bu ishlab chiqish yoki sinov maqsadlari uchun qabul qilinishi mumkin, lekin hech qachon ishlab chiqarish uchun emas. Buning o'rniga, resurslaringizga kirishga ruxsat berilgan aniq manbalarni belgilang.
2. Noto'g'ri Sozlangan Access-Control-Allow-Credentials
Agar Access-Control-Allow-Credentials: true
o'rnatilgan bo'lsa, bu serverning cookie-fayllar yoki HTTP autentifikatsiya sarlavhalari kabi hisob ma'lumotlarini o'z ichiga olgan so'rovlarga ruxsat berishini anglatadi. Biroq, bu sozlama yulduzcha belgisi bilan (Access-Control-Allow-Origin: *
) birgalikda jiddiy xavfsizlik zaifliklariga olib kelishi mumkin. Bu har qanday manbaga foydalanuvchi hisob ma'lumotlari bilan resurslarga kirish imkonini beradi, bu esa potentsial ravishda sessiyani o'g'irlash yoki ma'lumotlar buzilishiga olib kelishi mumkin.
3. Kiruvchi Ma'lumotlarni Yetarlicha Tekshirmaslik
Agar sizning API-ingiz mijoz tomonidan taqdim etilgan ma'lumotlarga, masalan, sarlavhalar yoki so'rov tanasidagi ma'lumotlarga tayansa va bu ma'lumotlarni to'g'ri tekshirmasa, tajovuzkor bu so'rovlarni manipulyatsiya qilishi mumkin. Masalan, avtorizatsiya tokenining yo'qligi jiddiy xavfsizlik kamchiligi bo'ladi. Ushbu hujumlarning oldini olish uchun har doim kiruvchi ma'lumotlarni server tomonida sinchkovlik bilan tekshiring.
4. Ma'lumotlarning Sizib Chiqishi
Yomon CORS konfiguratsiyalari bilvosita maxfiy ma'lumotlarning sizib chiqishiga olib kelishi mumkin. Masalan, agar server barcha HTTP usullari va barcha sarlavhalarga ruxsat bersa va so'rov ma'lumotlarini tekshirmasa, tajovuzkorlar o'zlari kirish huquqiga ega bo'lmagan ma'lumotlarni o'qishi mumkin. Qaysi usullar va sarlavhalar haqiqatan ham zarurligini diqqat bilan ko'rib chiqing va so'rov tarkibini sinchkovlik bilan tekshiring.
Xavfsiz CORS Konfiguratsiyasi uchun Eng Yaxshi Amaliyotlar
Quyida turli mamlakatlar va mintaqalarda qo'llanilishi mumkin bo'lgan CORSni xavfsiz sozlash uchun eng yaxshi amaliyotlar keltirilgan:
- Manbalarni Belgilang: Har doim resurslaringizga kirishga ruxsat berilgan manbalarni aniq ro'yxatini ko'rsating. Ishlab chiqarish muhitida hech qachon yulduzcha belgisini (
*
) ishlatmang. Bu zararli veb-saytlarga qarshi birinchi himoya chizig'ini ta'minlaydi. Masalan, barcha manbalarga ruxsat berish o'rniga, oldingi qism ilovalaringizning aniq domenlarini belgilang (masalan,Access-Control-Allow-Origin: https://your-frontend-app.com
). - Hisob Ma'lumotlarini Ehtiyotkorlik bilan Boshqaring: Agar sizning API-ingiz hisob ma'lumotlaridan (cookie-fayllar, HTTP autentifikatsiyasi) foydalansa,
Access-Control-Allow-Credentials: true
ni faqat aniq bir manba bilan birgalikda ishlating. Hech qachon uni yulduzcha belgisi bilan birlashtirmang. - HTTP Usullarini Cheklang: Faqat sizning API-ingiz uchun zarur bo'lgan HTTP usullariga (GET, POST, PUT, DELETE va hokazo) ruxsat bering. Keraksiz usullarga ruxsat bermang. Bu hujum yuzasini kamaytiradi va istalmagan harakatlarning oldini oladi. Masalan, agar sizga faqat GET va POST so'rovlari kerak bo'lsa,
Access-Control-Allow-Methods: GET, POST
ni o'rnating. - Ruxsat Etilgan Sarlavhalarni Cheklang: Xuddi shunday, faqat ilovangiz haqiqatda ishlatadigan HTTP sarlavhalariga ruxsat bering. Bu tajovuzkorlarning zararli sarlavhalarni kiritishini oldini oladi. Masalan, ruxsat etilgan sarlavhalarni belgilang:
Access-Control-Allow-Headers: Content-Type, Authorization
. - Server Tomonida Tekshiruvni Amalga Oshiring: CORS konfiguratsiyasidan qat'i nazar, har doim kiruvchi so'rovlarni server tomonida tekshiring. In'ektsiya hujumlari va ma'lumotlarni manipulyatsiya qilishning oldini olish uchun barcha kiruvchi ma'lumotlarni, shu jumladan sarlavhalar va so'rov tanalarini tozalang va tekshiring. Bu, ayniqsa, foydalanuvchi tomonidan taqdim etilgan ma'lumotlar bilan ishlaganda muhim xavfsizlik chorasidir.
- HTTPS dan foydalaning: Mijoz va server o'rtasidagi aloqani shifrlash uchun har doim HTTPS dan foydalaning. Bu maxfiy ma'lumotlarni tinglash va o'zgartirishdan himoya qiladi. Veb-saytingiz va API-ingiz HTTPS orqali taqdim etilishini ta'minlang, bu ma'lumotlar almashinuvi uchun xavfsiz kanal yaratadi.
- Muntazam Xavfsizlik Auditlari: CORS konfiguratsiyangiz va umuman API-ingizning muntazam xavfsizlik auditlarini o'tkazing. Avtomatlashtirilgan vositalar potentsial zaifliklarni aniqlashga va konfiguratsiyangiz vaqt o'tishi bilan xavfsiz bo'lib qolishini ta'minlashga yordam beradi. Har qanday noto'g'ri sozlamalarni aniqlash va bartaraf etish uchun CORS sozlamalaringizni muntazam ravishda ko'rib chiqing.
- Oldindan So'rovni Optimallashtirishni Ko'rib Chiqing: Agar sizning API-ingiz oldindan so'rovlardan (OPTIONS) foydalansa, oldindan so'rov natijalarini keshlash va ishlash samaradorligini oshirish uchun
Access-Control-Max-Age
sarlavhasini ko'rib chiqing, ayniqsa tez-tez murojaat qilinadigan resurslar uchun. Biroq, ayniqsa xavfsizlik yangilanishlari yoki API o'zgarishlari paytida uzoq kesh muddatlari bilan bog'liq xatarlardan ehtiyot bo'ling. - Yangilanib Turing: Eng so'nggi xavfsizlikning eng yaxshi amaliyotlari va paydo bo'layotgan tahdidlardan xabardor bo'lib turing. Xavfsizlik landshafti doimiy ravishda rivojlanib boradi va yangi zaifliklar va ularni yumshatish strategiyalari haqida xabardor bo'lish muhimdir. Xavfsizlik axborotnomalariga obuna bo'ling va xavfsizlik bloglari va forumlarini kuzatib boring.
Global Auditoriya uchun Amaliy Misollar va Mulohazalar
Keling, ba'zi amaliy stsenariylarni ko'rib chiqamiz va ularni global kontekstga moslashtiramiz:
Misol 1: Elektron Tijorat Platformasi
Turli mintaqalar uchun turli oldingi qism ilovalari bo'lgan elektron tijorat platformasi (masalan, https://us.example.com
, https://eu.example.com
, https://asia.example.com
). API bekendi (masalan, https://api.example.com
) alohida. Bunday holda, siz CORSni ushbu oldingi qism ilovalarining aniq manbalariga ruxsat berish uchun sozlaysiz. Masalan, bekendingizda konfiguratsiya quyidagicha bo'ladi:
Access-Control-Allow-Origin: https://us.example.com, https://eu.example.com, https://asia.example.com
Va agar siz hisob ma'lumotlaridan foydalanayotgan bo'lsangiz, barcha manbalarni alohida-alohida belgilash shart va Access-Control-Allow-Credentials: true
ham kiritilishi kerak.
Misol 2: Veb-asosidagi Admin Panelli Mobil Ilova
Mobil ilova (masalan, React Native yordamida) ma'lumotlar uchun API dan foydalanadi. Admin paneli, veb-ilova, ham xuddi shu API ga kirishi kerak. Veb-ilova manbasi https://admin.example.com
bo'lishi mumkin. CORS konfiguratsiyasi ushbu manbadan keladigan so'rovlarga ruxsat berishi kerak.
Misol 3: Mikroservislar Arxitekturasi
Mikroservislar arxitekturasida turli xizmatlar turli domenlarda joylashgan bo'lishi mumkin. Ushbu xizmatlarning bir-biri bilan xavfsiz aloqa qilishiga imkon berish uchun to'g'ri CORS konfiguratsiyasi juda muhimdir. CORS siyosatlarini boshqarish uchun xizmat tarmog'idan (service mesh) foydalanish manbalararo aloqani boshqarishni soddalashtirishi mumkin.
Global Joylashtirish uchun Mulohazalar
- Mahalliylashtirish: Agar sizning ilovangiz bir nechta tillarni yoki mintaqalarni qo'llab-quvvatlasa, CORS konfiguratsiyangiz domen nomlari yoki quyi domenlardagi o'zgarishlarni boshqarish uchun etarlicha moslashuvchan ekanligiga ishonch hosil qiling.
- Mintaqaviy Qoidalar: CORS konfiguratsiyangizga ta'sir qilishi mumkin bo'lgan har qanday mintaqaviy qoidalardan xabardor bo'ling. GDPR (Yevropada) va CCPA (Kaliforniyada) kabi ma'lumotlar maxfiyligi qonunlari siz qanday ma'lumotlarni almashishingiz va so'rovlarni qanday qayta ishlashingizga ta'sir qiladi.
- Kontent Yetkazib Berish Tarmoqlari (CDNs): Agar siz CDNs dan foydalanayotgan bo'lsangiz, CDN konfiguratsiyangiz CORS bilan mos kelishiga ishonch hosil qiling, chunki CDN keshlashi sarlavha javoblariga ta'sir qilishi mumkin.
- Sinov va Monitoring: CORS konfiguratsiyangizni turli brauzerlar va qurilmalarda sinchkovlik bilan sinab ko'ring va potentsial xavfsizlik muammolari yoki noto'g'ri sozlamalar uchun jurnallarni doimiy ravishda kuzatib boring.
Umumiy CORS Muammolarini Bartaraf Etish
Dasturchilar ko'pincha CORS bilan bog'liq muammolarga duch kelishadi. Quyida ba'zi umumiy muammolar va ularni qanday bartaraf etish yo'llari keltirilgan:
- Brauzer konsolidagi CORS xatolari: Bular odatda server to'g'ri CORS sarlavhalarini yubormayotganini bildiradi. Server tomonidagi konfiguratsiyangizni tekshiring.
- Oldindan so'rovdagi nosozliklar: Bu ko'pincha oldindan so'rov (OPTIONS) to'g'ri ishlanmaganligi sababli yuzaga keladi. So'rov usuli, sarlavhalari va manbasini ko'rib chiqing. Serverning OPTIONS so'rovlariga to'g'ri sarlavhalar bilan javob berishiga ishonch hosil qiling.
- Hisob ma'lumotlari bilan bog'liq muammolar: Agar hisob ma'lumotlari uzatilmayotgan bo'lsa,
Access-Control-Allow-Credentials: true
o'rnatilganligiga, manba aniq belgilanganligiga va mijoz hisob ma'lumotlarini yuborish uchun sozlanganligiga ishonch hosil qiling (masalan, JavaScript-ningfetch
yoki XMLHttpRequest-dawithCredentials: true
ni o'rnatish orqali). - Noto'g'ri sarlavha registri: Sarlavha nomlari registrga sezgir. Server konfiguratsiyasida ham, mijoz so'rovlarida ham to'g'ri registrga ega ekanligingizga ishonch hosil qiling.
- Keshlash muammolari: Brauzeringiz javoblarni keshlamayotganiga ishonch hosil qiling. Ishlab chiqish paytida brauzer keshini tozalang va keshlashni o'chirib qo'ying.
CORSni Boshqarish uchun Vositalar va Resurslar
CORSni tushunish va boshqarishga yordam beradigan bir nechta vositalar va resurslar mavjud:
- Brauzer Dasturchi Vositalari: HTTP sarlavhalarini tekshirish va CORS muammolarini bartaraf etish uchun brauzeringizning dasturchi vositalaridan (masalan, Chrome DevTools, Firefox Developer Tools) foydalaning. Tarmoq (network) yorlig'i so'rovlar va javoblarni tekshirish uchun ayniqsa foydalidir.
- CORS Tekshirgich: Onlayn CORS tekshirgichlar sizning konfiguratsiyangizni tezda tekshirishi va umumiy muammolarni aniqlashi mumkin.
- Postman yoki boshqa API sinov vositalari: Ushbu vositalar sizga maxsus HTTP so'rovlarini yuborish va javoblarni tekshirish imkonini beradi, bu CORS konfiguratsiyalarini sinash uchun foydalidir.
- Server Tomonidagi Freymvork Hujjatlari: CORSni sozlash bo'yicha batafsil ma'lumot uchun server tomonidagi freymvorkingizning rasmiy hujjatlariga (masalan, Express.js, Django, Spring Boot) murojaat qiling.
- MDN Web Docs: Mozilla Developer Network (MDN) CORS va HTTP sarlavhalari bo'yicha keng qamrovli hujjatlarni taqdim etadi.
Xulosa
CORS - bu turli manbalardan kelgan veb-ilovalar o'rtasida xavfsiz aloqani ta'minlaydigan muhim xavfsizlik mexanizmidir. Uning konfiguratsiyasini, xavfsizlik oqibatlarini tushunish va eng yaxshi amaliyotlarga rioya qilish orqali dasturchilar global auditoriya uchun mustahkam va xavfsiz veb-ilovalar yaratishi mumkin. Esda tuting, to'g'ri CORS konfiguratsiyasi shunchaki funksionallikni yoqish emas; bu sizning foydalanuvchilaringizni va ma'lumotlaringizni potentsial tahdidlardan faol himoya qilishdir. Har doim xavfsizlikka ustuvorlik bering va rivojlanayotgan tahdidlarga qarshi samarali bo'lib qolishini ta'minlash uchun konfiguratsiyangizni muntazam ravishda ko'rib chiqing. Ushbu qo'llanma CORSni o'zlashtirish va uni loyihalaringizda xavfsiz tarzda amalga oshirish uchun mustahkam boshlang'ich nuqta bo'lib xizmat qiladi, bu sizga yanada xavfsiz, global veb-ilovalar yaratishga yordam beradi.