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

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

کاربر سایت

esmaeeiilzadeh

عضویت از 1393/06/15

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

  • دوشنبه 20 خرداد 1398
  • 15:25
تشکر میکنم

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

من یک سایتی نوشتم که داخل صفحات از 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 لیست دیتابیس های مارو فرستاده بود.

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

پاسخ های این پرسش

تعداد پاسخ ها : 5 پاسخ
کاربر سایت

netdeveloper

عضویت از 1398/03/21

  • سه شنبه 21 خرداد 1398
  • 03:15

سلام

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

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

کاربر سایت

esmaeeiilzadeh

عضویت از 1393/06/15

  • سه شنبه 21 خرداد 1398
  • 15:23

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

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

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

کاربر سایت

محمد قاری

عضویت از 1395/02/07

  • چهارشنبه 22 خرداد 1398
  • 09:32

با سلام خدمت شما

این لینک رو مشاهده کنید

https://www.cloudways.com/blog/protect-php-website-sql-injection/

کاربر سایت

netdeveloper

عضویت از 1398/03/21

  • پنجشنبه 23 خرداد 1398
  • 18:23

سلام

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

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

کاربر سایت

roxment

عضویت از 1399/02/05

  • جمعه 5 اردیبهشت 1399
  • 18:17
filter_var($_POST['Name'], FILTER_SANITIZE_STRING);

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)