phpامنیتبرنامه نویسی

امنیت سایت در php – بخش دوم باگ SQLI

باگ SQLI  چیست :

باگ SQLI زمانی رخ میدهد که برنامه نویس قسمتی از کوئری خود را از کاربر میگیرید .

حال اگر برنامه نویس قسمت دریافت شده از کاربر را از دستورات SQL پاک سازی نکند به راحتی میتوان به دیتا بیس سایت دست رسی پیدا کرد .

سناریو هک با باگ SQLI و یک نمونه کد آسیپ پذیر :

فرض کنید برنامه نویس کدی مانند کد زیر نوشته است <?php

<?php 
$q = "select * from news where id =".$_GET['id'] ; 
mysql_query($q) ; 
?>

حال اگر کاربر بجای وارد کردن id کد زیر را وارد کند کار تمام است :

UNION SELECT admin FROM user

 

راه حل جلو گیری از باگ SQLI:

راه حل پاک سازی ورودی ها از دستورات خطرناک است برای این کار از تابع mysql_real_escape_string استفاده میکنیم  .

البته روش های دیگری هم هست اما بهترین روش و آسان ترین روش همین است . برای استفاده از این تابع مانند زیر عمل میکنیم :

<?php
$query="select * from news where id=". mysql_real_escape_string($_GET['id']);
mysql_query($query);
?>

 

در این پست و پست قبلی شما رو با دو باگ مهم آشنا کردم حال برای اینکه کلا از شر این دو باگ خلاص شویم برای خودمون یک فانکشن بنویسیم تا تمامی ورودی خودمون رو فیلتر کنیم فانکشن ما میتوان به شکل زیر باشد

function clean($string){
#Clean inputs for XSS and SQLI
$string = trim($string);
$string = htmlspecialchars($string);
$string = strip_tags($string);
$string = mysql_real_escape_string($string);
return $string;
}

همانطور که در کد بالا مشاهده میکنید متد clean  توانسته به راحتی تمامی ورودی ها رو فیلتر و پاک کند .

در پست بعدی شما را با باگ های RFI , LFI و نحوه مقابله با این باگ آشنا میکنیم

شاهین احمدزاده

شاهین احمدزاده هستم مهندس کامپیوتر در گرایش نرم افزار علاقه مند به برنامه نویسی و طراحی سایت . شماره تلفن : 09195227837 ایمیل : shahin.ahmadzadeh795@gmail.com

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا