UzDevid – Telegram
UzDevid
4.58K subscribers
78 photos
19 videos
117 links
Dasturlash - bu nafaqat mening kasbim, balki bu mening yoqtirgan mashg'ulotim. Men uchun doimiy o'rganish va rivojlanish manbai.

https://tirikchilik.uz/uzdevid
Download Telegram
Bu maqola PHP-da zaif solishtirish (==) dan foydalanish bilan bog'liq bo'lishi mumkin bo'lgan zaifliklarga bag'ishlangan. Qattiq solishtirishdan (===) farqli o'laroq, zaif solishtirish ma'lumotlar turlarini hisobga olmaydi va kutilmagan natijalarga olib kelishi mumkin, bu kodni hujumlarga nisbatan zaif qiladi.

PHP Loose Comparison (PHP-dagi zaif solishtirish)

Zaif solishtirish ikkita qiymat == operatori bilan taqqoslanganda sodir bo'ladi, bu ma'lumotlar turlarini tekshirmaydi. PHP taqqoslashdan oldin taqqoslanadigan qiymatlarni umumiy turga keltirishga harakat qiladi, bu esa kutilmagan natijalarga olib kelishi mumkin. Masalan, 'string' qatori true bilan taqqoslanganda true ga teng deb hisoblanadi.

Xavfsiz bo'lmagan avtorizatsiya tizimi:

Login va parolni tekshirish misolida, xaker true qiymatlarini o'zgartirishi mumkin, bu noto'g'ri ma'lumotlar bilan ham muvaffaqiyatli avtorizatsiyaga olib keladi.

Switch yordamida xavfsiz bo'lmagan avtorizatsiya:

Bu misolda xaker $_POST['user_role'] qiymatini true sifatida qo'llash orqali administrator huquqlariga ega bo'lishi mumkin, chunki switch-case ham zaif solishtirishdan foydalanadi.

Zaifliklarni kamaytirish

Bunday muammolardan qochish uchun, qiymat va ma'lumotlar turini tekshiradigan qattiq solishtirish (===) dan foydalanish tavsiya etiladi. Shuningdek, PHP 8.0 dan boshlab, switch kabi ishlaydigan, ammo qattiq solishtirishdan foydalanadigan match tuzilmasidan foydalanish mumkin, bu kodni yanada xavfsiz qiladi.

@uzdevid
👍5🔥21👏1
SQL in'ektsiya – bu hujumchilarning veb-dasturdagi xavfsizlik zaifliklaridan foydalanib, ma'lumotlar bazasiga zararli SQL so'rovlarini yuborishi va natijada ma'lumotlarga ruxsatsiz kirishi yoki ularni o'zgartirishi mumkin bo'lgan xavfli hujum turi. Bu zaiflik odatda foydalanuvchi kiritgan ma'lumotlar to'g'ridan-to'g'ri SQL so'rovlariga qo'shilganda yuzaga keladi.

### SQL In'ektsiyaning Misoli

Quyidagi kod PHP tilida yozilgan oddiy login shakli:

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($connection, $query);

Ushbu kodning zaifligi shundaki, foydalanuvchi tomonidan kiritilgan $username va $password qiymatlari to'g'ridan-to'g'ri SQL so'roviga qo'shiladi. Bu esa SQL in'ektsiyasiga olib kelishi mumkin.

### SQL In'ektsiya Hujumi

Tasavvur qiling, hujumchi quyidagi foydalanuvchi nomi va parolni kiritadi:

- Username: admin' --
- Password: anything

Natijada SQL so'rovi quyidagicha ko'rinishga ega bo'ladi:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'anything'

`--` SQL so'rovini izohga (kommentariyaga) aylantiradi, natijada password qismi e'tibordan chetda qoladi. Bu so'rov barcha "admin" foydalanuvchilarini qaytaradi, va agar mavjud bo'lsa, hujumchi tizimga parolsiz kirishi mumkin.

### Zaiflikdan Qanday Qochish Mumkin

SQL in'ektsiyadan himoyalanish uchun quyidagi yondashuvlar qo'llanilishi kerak:

1. Tayyorlangan so'rovlar (Prepared Statements) va parametrlarni bog'lash: Bu usulda foydalanuvchi kiritgan ma'lumotlar SQL so'roviga to'g'ridan-to'g'ri qo'shilmaydi, balki parametr sifatida yuboriladi.

Misol (PHP va MySQLi):


   $stmt = $connection->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();

2. Ma'lumotlarni sanitarizatsiya qilish va validatsiya qilish: Foydalanuvchi kiritgan ma'lumotlarni qabul qilishdan oldin, ularni to'g'ri shaklda ekanligini tekshirish lozim.

3. PDO bilan foydalanish: PDO (PHP Data Objects) bilan tayyorlangan so'rovlarni qo'llash xavfsizlikni oshiradi.

Misol:


   $stmt = $connection->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(['username' => $username, 'password' => $password]);

4. Kiruvchi ma'lumotlarni cheklash: Foydalanuvchi kiritishi mumkin bo'lgan ma'lumotlarni cheklash va kerak bo'lsa, ma'lumotlarni maxsus formatga keltirish (masalan, raqamlar, elektron pochta manzillari va boshqalar).

Bu yondashuvlar SQL in'ektsiyadan himoyalanishga yordam beradi va veb-dastur xavfsizligini oshiradi.
👍11🔥21
Toza kod (Clean Code) nima?

Toza kod - bu dasturlashda kodning sifati va samaradorligini ta’minlash uchun ishlatiladigan uslub. Toza kod nafaqat kompyuter uchun, balki dasturchilar uchun ham tushunarli bo‘lishi kerak. Kodni o'qish, tushunish va undan foydalanish oson bo'lsa, uni kelajakda qo'llab-quvvatlash, kengaytirish va xatolarni tuzatish ham oson bo'ladi.

Toza kodning asosiy tamoyillari

1. Aniq va qisqa nomlar: O'zgaruvchilar, funksiyalar va sinflar (classlar)ga aniq va mazmunli nomlar berish kodni tushunarli qiladi. Yaxshi nomlar yordamida kodni o'qigan dasturchi darhol nima qilinayotganini tushunishi mumkin.

2. Bir vazifa – bir funksiya: Har bir funksiya faqat bitta vazifani bajarishi kerak. Bu, funksiyalarni kichik va oddiy qilib yozishga imkon beradi, natijada kodni qayta ishlatish va test qilish osonlashadi.

3. Izohlar kamroq, lekin aniq: Kod o'zi uchun gapirishi kerak, ya'ni kod yozilganda izohlar ko'p bo‘lmasligi kerak. Faqat kerakli joylarda izoh qo'shiladi, masalan, kodni tushunish qiyin bo'lgan joylarda.

4. Tuzilishi to'g'ri: Kodning tuzilishi (strukturasi) mantiqiy va tartibli bo'lishi kerak. Masalan, bir-biriga yaqin bo'lgan funksiyalar yoki sinflarni bir joyga to'plash, kodni o'qishni osonlashtiradi.

5. Test bilan ta’minlash: Toza kod yozishda, uni avtomatik testlar bilan tekshirish muhimdir. Testlar yordamida kodning to'g'ri ishlashini ta’minlash va kelajakda o'zgarishlar kiritilganda xatolarni aniqlash oson bo‘ladi.

Nega toza kod muhim?

Toza kod dasturchining samaradorligini oshiradi va jamoaviy ishlashni yengillashtiradi. Toza kodni tushunish va tahrirlash oson bo'lgani uchun, loyiha vaqt o‘tishi bilan murakkablashganida ham, kodni qo‘llab-quvvatlash ancha oson bo‘ladi. Shu sababli, toza kod yozish dasturchining malakasini oshirishda muhim omil hisoblanadi.

Toza kod nafaqat texnik jihatdan yaxshi kod bo'lishi, balki o'qish, tushunish va qo'llab-quvvatlash uchun qulay bo'lishi kerak. Bu tamoyillarni amalda qo'llash dasturiy ta'minotning sifatini oshiradi va uni yanada ishonchli qiladi.

@uzdevid
🔥8👍21
Dasturchilarni bayrami bilan tabriklayman!

HTML dasturlash tili emas.

@uzdevid
👍10😁6👎2🔥2😢1
SQL Indexlar va Ularning Turlari

SQL index — bu jadvalda tezkor qidiruvni ta’minlash uchun ishlatiladigan maxsus tuzilma. Indexlar jadval ustunidagi ma'lumotlarni saralash va ularga tezkor kirishni ta’minlaydi. Bunday qilib, katta hajmdagi ma’lumotlarga ega jadvallardan so‘rovlar ko‘proq samaradorlik bilan amalga oshiriladi. (davomi)

@uzdevid
👍82🔥2👏1
SQL indexlar strukturalari

SQL indexlari turli xil ma’lumot tuzilmalari asosida quriladi, ularning har biri ma’lumotlarni tezkor qidirish va qabul qilish uchun o‘ziga xos afzalliklarga ega. Eng keng tarqalgan tuzilma B-tree bo‘lsa-da, boshqa (davomi)

@uzdevid
🔥3👍2👏21
Algoritm qiyinligi

Algoritmlar qiyinligi — bu algoritmning ishlash samaradorligini va vaqt yoki resurs talablarini baholash usuli. Asosan, algoritm qiyinligi ikkita asosiy mezon bilan o'lchanadi: vaqt murakkabligi va xotira murakkabligi. (davomi)

@uzdevid
👍6🔥4👏21
composer-ning .json va .lock fayllarining ahamiyati

PHP dasturlash tilida ishlaydigan loyihalarda paketlarni boshqarish va ularni boshqaruv tizimini soddalashtirish uchun Composer dan foydalaniladi. Ushbu vosita yordamida oson va samarali ravishda kerakli kutubxonalarni loyihaga qo'shish, yangilash yoki o'chirish mumkin. Composer-ning asosiy fayllari esa composer.json va composer.lock hisoblanadi. (davomi)

@uzdevid
👍7🔥31👏1
Composer-da kutubxonalarning talqinini boshqarish

Composer orqali kutubxonalar o‘rnatishda talqinlarni boshqarish uchun turli belgilar ishlatiladi. Keling, ularning asosiy farqlarini ko'rib chiqamiz:

- 1.0: Aniq shu talqin o‘rnatiladi.
- 1.0.*: 1.0.x qatoridagi istalgan talqin o‘rnatiladi (1.0.1, 1.0.2).
- ^1.0: 1.0.x va 1.x.x talqinlari o'rnatilishi yoki yangilanishi mumkin, lekin 2.0.0 emas.
- ~1.2: 1.2.x talqinlari o‘rnatiladi, lekin 2.0.0 emas.
- >=1.0 <2.0: 1.0 dan 2.0 gacha bo'lgan talqinlar o'rnatiladi, lekin 2.0 emas.

Bu belgilar talqinlarni o'rnatish va yangilashni aniq boshqarishga yordam beradi.

@uzdevid
👍10🔥31👏1
MySQL yoki PostgreSQL, qaysi biri afzalroq?

MySQL va PostgreSQL o'rtasida tanlov qilish loyihaning talablariga bog'liq. Ikkala ma'lumotlar bazasi tizimi ham kuchli va keng qo'llaniladigan variantlar bo'lsa-da, ular o'zlarining xususiyatlari va foydali jihatlari bilan farq qiladi. (davomi)

@uzdevid
👍81🔥1👏1
REST va RESTful API, farqi nimada?

REST (Representational State Transfer) — bu veb-servislarni yaratish uchun ishlab chiqilgan me'yorlar to‘plami bo‘lib, u resurslarga kirishni oddiy va tizimli usulda tashkil etishga yordam beradi. (davomi)

@uzdevid
👍7🔥21👏1
Stateful va Stateless tushunchalari

Kompyuter tarmoqlari va dasturiy ta'minotda "stateless" va "stateful" tushunchalari tizimning mijoz va server o'rtasidagi muloqotni qanday boshqarishini ifodalaydi. (davomi)

@uzdevid
👍3🔥31👏1
gPort-dan 19124510 soniya foydalanilibti. Ya'ni bu 5302 soat yoki 221 kun degani

@uzdevid
🔥3👏2👍1🤯1
So'ngi vaqtlarda kiber jinoyat, kartadan pul o'marishlar ko'paygani bois, payme mana shunday test sinovlari o'tkazyabti ekan. Tavsiya qilaman.

https://cybersecurity.repost.uz

@uzdevid
👍9👏2🔥1
PHP-da funksiyalar obyektlarni qanday qabul qilishi (qiymat bo‘yicha yoki havola bo‘yicha) dasturdagi o‘zgaruvchilar bilan ishlash uslubini belgilaydi. Obyektlar va oddiy ma'lumot turlari bilan ishlashda farqlar mavjud. Keling, obyektlar funksiyaga qanday uzatilishini qisqacha ko‘rib chiqamiz.

Obyektlarni qiymat va havola bo‘yicha uzatish

PHP-da oddiy ma'lumot turlari (masalan, integer, string, array) funksiyaga qiymat bo‘yicha uzatiladi. Bu shuni anglatadiki, o‘zgaruvchining nusxasi funksiyaga yuboriladi, va funksiyada o‘zgarishlar asl o‘zgaruvchiga ta'sir qilmaydi. Ammo obyektlar bilan ishlaganda bu jarayon boshqacha ishlaydi. PHP 5-dan boshlab obyektlar havola bo‘yicha uzatiladi, bu esa obyektga to‘g‘ridan-to‘g‘ri kirish imkonini beradi.

Obyektlarni havola bo‘yicha uzatish

Obyektlar PHP-da funksiyaga havola bo‘yicha uzatiladi. Bu shuni anglatadiki, funksiya obyektning manziliga murojaat qiladi va o‘zgarishlar to‘g‘ridan-to‘g‘ri asl obyektga ta'sir qiladi. Masalan, funksiyada obyektning biror xususiyati o‘zgartirilsa, bu o‘zgarish asl obyektga ham ta'sir qiladi.

class Product {
public $price = 100;
}

function changePrice($item) {
$item->price = 200;
}

$product = new Product();
changePrice($product);
echo $product->price; // Result: 200


Bu yerda $product obyektini funksiyaga uzatganda, obyektning manzili uzatiladi. Shuning uchun funksiya ichida xususiyat o‘zgarishi asl obyektga ta’sir ko‘rsatadi.

Obyektlarni klonlash va nusxa qilib uzatish

Ba’zi hollarda obyektning asl qiymatini saqlab qolish kerak bo‘ladi. Bunday hollarda obyektni funksiyaga yuborishdan oldin klonlash orqali nusxa yaratish mumkin. Buning uchun clone operatoridan foydalaniladi.

class Product {
public $price = 100;
}

function changePrice($item) {
$item->price = 200;
}

$product = new Product();
$clonedProduct = clone $product;
changePrice($clonedProduct);
echo $product->price; // Result: 100
echo $clonedProduct->price; // Result: 200


Bu misolda $clonedProduct obyektning nusxasi sifatida yaratiladi va funksiya bu nusxani o‘zgartirsa ham, asl $product obyektining qiymati saqlanib qoladi.

Qiymat va havola bo‘yicha uzatish o‘rtasidagi farq

- Qiymat bo‘yicha uzatishda obyektning nusxasi uzatiladi, bu esa asl obyektga ta’sir qilmaydi.
- Havola bo‘yicha uzatishda esa obyektning manzili uzatiladi va funksiyadagi o‘zgarishlar obyektning asl qiymatiga ta’sir ko‘rsatadi.

Xulosa

PHP-da obyektlar avtomatik ravishda havola bo‘yicha uzatiladi, ya'ni funksiyalar obyektning asl qiymatini o‘zgartirishi mumkin. Agar funksiyaga uzatilgan obyektning asl qiymati o‘zgarishini istamasangiz, uni clone yordamida nusxalash mumkin. Bu tushunchalar kodni optimallashtirishda va obyektlar bilan ishlashda muhim rol o‘ynaydi, shuningdek, PHP dasturlarini to‘g‘ri tushunib yozishga yordam beradi.

@uzdevid
👍14👏31🔥1
RESTful API — bu REST tamoyillariga to‘liq amal qiladigan API bo‘lib, mijoz va server o‘rtasidagi o‘zaro aloqa uchun mo‘ljallangan samarali va oddiy interfeysdir. RESTful API lar HTTP protokoli orqali resurslarni boshqarishga imkon beradi. (davomi)

@uzdevid
👍8👏2🔥1
is_null yoki \is_null, qaysi biri afzal va nima uchun?

is_null - php-ning bu funksiyasi haqida yozish shart emas deb o'ylayman. Ushbu funksiyani har ikki hil chaqirish uslubi bir xil natija qaytarsada ularning chaqirilish mexanizmi tarafdan farqi bor.

Nom bo'shlig'i (namespace) mavjud bo'lgan loyihada, is_null deya chaqirilsa, php avvalo joriy nom bo'shlig'dan (namespace) is_null nomli funksiyani qidiradi, topaolmasa so'ng global funksiyalar ichidan ushbu funksiyani chaqiradi. Va bu orada sezilarli bo'lmagan vaqt sarflaydi.

\is_null (backslash) orqali funksiya chaqirilsa, php joriy nom bo'shlig'iga (namespace) ahamiyat bermasdan, bevosita global funksiyalar ichidan chaqiradi.

Bu tezlikning farqi amalda sezilmasligi mumkin, lekin murakkab loyihalar 'namespace' bilan ishlaganda \is_null afzalroq bo'ladi.

Huddi shu tartib is_array, in_array, class_exists, end va boshqa global funksiyalarda ham ishlaydi.

@uzdevid
👍12🔥3👎2👏2
Dependency inversion va injection nima va ularning farqi nimada?

Dasturlashda modullar o'rtasida bog'lanishlarni boshqarish juda muhimdir. Bu maqsadda "Dependency Inversion" (DI) va "Dependency Injection" (DI) tushunchalari ko'pincha bir-biriga o'xshash tarzda qo'llaniladi, lekin ularning ma'nolari va ishlatilishida farqlar bor. (davomi)

@uzdevid
👍15👎3🔥2👏2🥰1
Mikroservislar: Kichik xizmatlar bilan katta tizimlar yaratish

Mikroservislar arxitekturasi katta va murakkab dasturiy tizimlarni kichik, mustaqil xizmatlarga bo‘lib boshqarish imkonini beradigan usuldir. Har bir mikroservis o‘ziga xos vazifani bajaradi va boshqa mikroservislar bilan minimal o‘zaro bog‘liq holda ishlaydi. Bu yondashuv tizimlarni qurishda kengayuvchanlik, mustaqillik va texnologik xilma-xillikni ta'minlaydi.

### Mikroservislar qanday ishlaydi?
Mikroservislar monolit yondashuvga nisbatan kichikroq hajmli va mustaqil komponentlardan iborat bo‘ladi. Har bir mikroservis alohida jamoa tomonidan ishlab chiqilishi va boshqarilishi mumkin. Ular HTTP, gRPC, RabbitMQ yoki WebSocket kabi turli protokollar orqali bir-biri bilan muloqot qiladi.

Mikroservislar afzalliklari:
1. Kengayuvchanlik: Har bir xizmat alohida kengaytiriladi, bu esa tizim yukini balanslashda qulaylik yaratadi.
2. Texnologik mustaqillik: Har bir mikroservis o‘z texnologiyasi va dasturlash tili yordamida yaratilishi mumkin.
3. Yuqori mavjudlik: Biror mikroservis ishdan chiqqanda, boshqa xizmatlar ishlashda davom etadi.
4. Tezkor joriy etish: Kichik xizmatlar tezroq ishlab chiqilib, yangilanishlar tez-tez amalga oshiriladi.

Mikroservislar kamchiliklari:
1. Murakkablik: Ko‘plab xizmatlarni bir-biri bilan sinxronlashtirish, monitoring qilish va muvofiqlashtirish murakkab bo‘lishi mumkin.
2. Tarmoq kechikishlari: Xizmatlar o‘zaro tarmoq orqali muloqot qilgani sababli, kechikishlar yuzaga kelishi mumkin.
3. Ma'lumotlarni boshqarish: Har bir xizmat o‘z ma'lumot bazasiga ega bo‘lishi mumkin, bu esa ma'lumotlarning izchilligini saqlashni qiyinlashtiradi.

Xulosa
Mikroservislar yirik dasturlarni boshqarish, ishlab chiqish va kengaytirishda zamonaviy yechim hisoblanadi. Kichik xizmatlar ko‘rinishida dasturlarni tashkil etish orqali tizim mustaqilligi va kengayuvchanligi oshadi. Biroq, ularni muvaffaqiyatli amalga oshirish0 murakkablik va tarmoq muammolariga qarshi ehtiyotkorlik talab qiladi.

@uzdevid
👍33👎6🔥3😢2👏1
Mikroservis Tamoyillari: Yirik Tizimlarni Qismlarga Ajratish Asoslari

Mikroservis arxitekturasi samarali ishlashi uchun ma'lum tamoyillarga amal qilish muhim. Ushbu tamoyillar mikroservislarni mustaqil, kengayuvchan va ishonchli tizimlar yaratishga yordam beradi.

1. Xizmatlar Mustaqilligi
Har bir mikroservis alohida ishlab chiqilishi, joylashtirilishi va boshqarilishi kerak. Bu ularning boshqa xizmatlardan mustaqil bo‘lishini ta'minlaydi va bir xizmat ishdan chiqsa, boshqa xizmatlar ishlashda davom etishi mumkin.

2. Yagona Mas'uliyat Printsipi (SRP)
Mikroservislar faqat bitta vazifani bajarishi kerak. Kichik va aniq funksiyalarni bajaruvchi xizmatlar yaratish tizimni oson boshqarish va kengaytirishga imkon beradi.

3. Avtonomiyat
Xizmatlar o‘z muammolarini mustaqil hal qilishi kerak. Har bir mikroservis o‘z biznes jarayonlariga ega bo‘lishi va alohida texnologiya to‘plamidan foydalanishi mumkin. Bu ularga mustaqillikni va moslashuvchanlikni oshiradi.

4. Mustaqil Joylashtirish
Har bir mikroservis alohida joylashtirilishi va yangilanishi mumkin bo‘lishi kerak. Bu yangi funksiyalarni tezroq joriy etish va mavjud xizmatlarni yangilashda tizimga minimal ta'sir ko‘rsatish imkonini beradi.

5. Decentralizatsiyalangan Ma'lumotlar Boshqaruvi
Mikroservislar ma'lumotlarni o‘z ichida boshqarishi kerak. Markazlashtirilgan ma'lumotlar omboridan ko‘ra, har bir mikroservis o‘ziga tegishli ma'lumotlarni boshqarib, o‘z ma'lumotlar omboridan foydalanadi.

6. Tarmoq orqali Muloqot
Mikroservislar o‘zaro API yoki xabar tizimlari orqali muloqot qiladi. Bu ular orasidagi bog‘liqlikni kamaytiradi va ularni kengaytirishga imkon beradi, lekin bu tarmoq kechikishlari va ishonchlilikka e'tibor berishni talab qiladi.

7. Monitoring va Logging
Har bir mikroservis uchun monitoring va log yuritish jarayoni mustahkam bo‘lishi kerak. Bu xizmatlarning sog‘lig‘ini kuzatish va muammolarni tezda aniqlashga yordam beradi.

Xulosa
Mikroservis tamoyillari ulardan samarali foydalanish uchun muhimdir. Xizmatlar mustaqilligi, avtonomiyat va mustaqil joylashtirish orqali yirik tizimlarni yanada moslashuvchan va kengayuvchan qilish mumkin.

@uzdevid
👍7016👎9🤔9🔥5🥰5