امنیت سایت در 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 و نحوه مقابله با این باگ آشنا میکنیم