php Sql injecton açığı

  • Mövzu başlanğıcı SandWorm
  • Başlama tarixi
S

SandWorm

Guest
Çox sistemin əvvəldən və hələdə gümüzdə aktif olaraq buraxılan təhlükəszilik açığı “Sql Injection” yəni verilənlər bazası zəhərləmə işləmi.

Bəs bu “SQL Injection” nə işə yarıyır?

SQL Injection zəifliyi saytın verilənlər bazasına sızaraq məlumatların oğurlanmasına səbəb ola bilər.

Bəs bu proses necə həyata keçirilir?

Bu açıq php ilə verilənlər bazası sorğu edərkən string uygulaması ilə sql-də məsələn olaraq yazılar verilənlər bazasında axtarış edərkən o axtarışı dayandırı fərqli bir verilənlər bazasına keçib orada kı verilənləri göstərməsidir qısaca php ilə saytınızın axtarış bölümüə etdiiyniz axtar.php?s=yazi

Bəs bu problemi necə aradan qaldıraq?

Bunun üçün qısa bir funksiya hazırlamışıq, bu funksiya ilə siz aldığınız məlumatları sorğulaya biləcəksiniz.

<?php
function koruma($k) {
if(preg_match("/[\-]{2,}|[;]|[']|[\\\*]/",$k)) {
echo '';
exit;
} else {
echo '';
}
}

koruma($_GET["ara"]);
?>
Funksiya bu şəkildə bir işləm edər , veridə sql injection karakterləri varsa yəni ‘ kimi karakterlər varsa exit; ataraq bütün işləmləri sonlandırır.

koruma($veri); bu formada sorğu edə bilərsiniz.
 
Dırnaqlar varsa slashlar varsa str replace ilə onları silə də bilərsiz , və ya no qoutes ilə dırnaqları silə bilərsiz əvəzinə &quot şəklində qalar və s.
 
Salam, təşəkkürlər.
Mən qabağ core php ilə yazanda addslashes, htmspacielchars, striptags ilə filterləyirdim sorğuları.
Laravelə keçəndən laravelin öz ORM və QUERY BUİLDER sistemi bunları özü filtirləyir.
Amma yenədə bəzən row sql yazanda yenə yuxarıda yazdıqım filtirlər lazım olur
 
Laraveldə adicə insert əməliyyatı ORM ilə bu qədər sadə və optimizə edilmiş formadadır.

PHP:
User::create(['name' => 'Demo']);
 
Salam, təşəkkürlər.
Mən qabağ core php ilə yazanda addslashes, htmspacielchars, striptags ilə filterləyirdim sorğuları.
Laravelə keçəndən laravelin öz ORM və QUERY BUİLDER sistemi bunları özü filtirləyir.
Amma yenədə bəzən row sql yazanda yenə yuxarıda yazdıqım filtirlər lazım olur
Dəyməz
 
1) SQL Enjeksiyonundan qorunmaq üçün aşağıdakı üsulları tətbiq edə bilərsiniz:

PDO və ya mysqli istifadə edin: PDO və mysqli SQL Injection-a qarşı daha təhlükəsiz olan hazır funksiyaları və funksiyaları təmin edir.
Nümunə PDO bağlantısı:


PHP:
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // PDO səhv hesabatını aktivləşdirin
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Bağlantı başarılı";
} catch(PDOException $e) {
  echo "Bağlantı hatası: " . $e->getMessage();
}


2) Təhlükəsiz məlumat girişi edin: Sorğularınızda istifadəçi tərəfindən daxil edilmiş məlumatlardan birbaşa istifadə etməyin. Məlumat daxiletmələrini filtrləyin, qaçış simvolları əlavə edin və ya parametrlərdən istifadə edin.

Escape simvolunun istifadəsi nümunəsi:

PHP:
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);

$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

3) Parametr istifadəsi nümunəsi:

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

1) Təhlükəsizliyi artırmaq üçün istifadəçi icazəsini təmin edin: İstifadəçilərə yalnız icazəsi altında olan məlumatlara daxil olmağa icazə verin. Məsələn, istifadəçinin yalnız oxumaq üçün icazələri varsa, yazma əməliyyatlarına icazə verilməməlidir.

2) Sorğularınızdakı istifadəçi daxiletmələrini təsdiq edin: İstifadəçi daxiletmələrinin gözlənilən məlumat növünə uyğun olduğundan əmin olun. Məsələn, bir nömrə gözlənilirsə, istifadəçi daxiletməsi nömrə olmalıdır.

3) Yeniləmələri və yamaqları quraşdırın: Təhlükəsizlik zəifliklərindən qorumaq və yamaqları quraşdırmaq üçün istifadə olunan texnologiyaları və proqram təminatını mütəmadi olaraq yeniləyin.
 
Geri
Üst