مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

راهنمایی جهت رفع مشکل سایت در برابر sql injection

دوشنبه, 20 خرداد 1398 15:25

راهنمایی جهت رفع مشکل سایت در برابر sql injection

سلام دوستان.وقت بخیر

من یک سایتی نوشتم که داخل صفحات از get  و post استفاده میکنم. به عنوان مثالی یکی از صفحاتم به این صورت هست. www.domain.comblog.php?id=1

حالا وقتی که این id رو میگیرم و از طریق php میفرستم به فانکشنی که باهاش از دیتابیس فراخونی میکنم ولی قبلش میام با یک فانکشن دیگه که نوشتم اون مقدار id رو چک میکنم. به این صورت:

به عنوان مثال این قسمت select من هست

select * fron tbl_blog where id={$database->escape_value($id)}

حالا با تابع escape_value هم که داخل کلاس database هست میام همون مقدار id رو چک میکنم به این صورت عمل میکنه

 public function escape_value($value) {
          if ($this->real_escape_string_exists) { 
              if ($this->magic_quotes_active) {
                  $value = stripslashes($value);
              }
              $value = mysqli_real_escape_string($this->connection, $value);
          } else {
              if (!$this->magic_quotes_active) {
                  $value = addslashes($value);
              }
          }
          return $value;
      }

ولی باز با این حال مشکل sql injection  دارم و یک هکری هم به ما پیام داد که دسترسی به دیتابیس های ما وجود داره و با sqlmap لیست دیتابیس های مارو فرستاده بود.

من چطوری میتونم جلوی این مشکل رو بگیرم. ممنون میشم راهنمایی بفرمایین.

ﺳﻪ شنبه, 21 خرداد 1398 03:15

سلام

اگر id از نوع عددی است اول توی کد فیلترش کن ، یعنی اگه غیر از عدد بود درخواست رو رد کن

بعد هم تمامی کارکترها و عبارت هایی که توی sql معنی دارن رو فیلتر کن

ﺳﻪ شنبه, 21 خرداد 1398 15:23

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

بله آنهایی که int هستند رو دارم همین کار رو میکنم. ولی باری اونهایی که کاراکتر هست نمیدونم چی کار باید کنم.

میشه راجع به فیلتر کردن کاراکترهای خاص یکم بیشتر توضیح بدین.ممنون

چهارشنبه, 22 خرداد 1398 09:32
پنج شنبه, 23 خرداد 1398 18:23

سلام

باید تمامی کارکترهایی که توی sql معنی دارن مثل ' یا " یا % و الی آخر رو محدود کنی. همچنین عبارتهایی مثل select ، update ، delete و یا عبارتهای مشابه رو هم محدود کنی. در کل عبارتی که به پایگاه داده ارسال میشه باید

همون چیزی باشه که انتظار هست. ببینید مثلا اگر یک ' داخل عبارت ارسالی به پایگاه داده باشه ، query کلا عوض میشه

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید