### 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:
anythingNatijada 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.