نمایش نتایج 1 تا 9 از 9

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

  1. #1

    راهنمایی جهت رفع مشکل سایت در برابر 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 لیست دیتابیس های مارو فرستاده بود.
    من چطوری میتونم جلوی این مشکل رو بگیرم. ممنون میشم راهنمایی بفرمایین.

  2. #2

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

    از pdo یا mysqli استفاده کن مثل روشی که در لینک زیر هست
    https://stackoverflow.com/questions/...jection-in-php


    یا از کوئری بیلدر ها اگه می خواین خیلی سبک باشه:
    مثل https://github.com/usmanhalalit/pixie


    یا می توانید از orm های php استفاده کنید. داخل اونها موارد امنیتی که شامل sql injection میشه رو در نظر گرفتن
    مثل : https://github.com/gabordemooij/redbean


    یا از یک فریمورک که این قابلیت ها داخلش موجود باشه مثل لاراول

  3. #3

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

    سلام

    مطمئن شوید که real_escape_string_exists حتما true باشد و در صورتی که وجود ندارد با توجه به مشکلات امنیتی برنامه خطای فتال دهد نه اینکه به راحتی متغیر را بدون تغییری برگرداند.


    مقدار را حتما در داخل "" قرار دهید.

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


    برای مقادیر عددی حتما از عدد بودن آن مطمئن شوید مثلا با عبارت $id = (int) $id;
    آخرین ویرایش به وسیله ali_sed : سه شنبه 21 خرداد 1398 در 10:30 صبح

  4. #4

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

    نقل قول نوشته شده توسط ali_sed مشاهده تاپیک
    سلام

    مطمئن شوید که real_escape_string_exists حتما true باشد و در صورتی که وجود ندارد با توجه به مشکلات امنیتی برنامه خطای فتال دهد نه اینکه به راحتی متغیر را بدون تغییری برگرداند.


    مقدار را حتما در داخل "" قرار دهید.

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


    برای مقادیر عددی حتما از عدد بودن آن مطمئن شوید مثلا با عبارت $id = (int) $id;

    ممنون از شما بابت راهنمایی
    خب چطوری متوجه بشم که
    real_escape_string_exists فعال هست و اگر نیست اررور بده؟
    اینطوری هم اومدم فانکشنم رو تغییر دادم ولی باز چک کردم همچنان injection وجود داره

    $value = stripslashes($value);          $value = addslashes($value);          $value = htmlentities($value);          $value = mysqli_real_escape_string($this->connection, $value);          return $value;

  5. #5

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

    نقل قول نوشته شده توسط peymang مشاهده تاپیک
    از pdo یا mysqli استفاده کن مثل روشی که در لینک زیر هست
    https://stackoverflow.com/questions/...jection-in-php


    یا از کوئری بیلدر ها اگه می خواین خیلی سبک باشه:
    مثل https://github.com/usmanhalalit/pixie


    یا می توانید از orm های php استفاده کنید. داخل اونها موارد امنیتی که شامل sql injection میشه رو در نظر گرفتن
    مثل : https://github.com/gabordemooij/redbean


    یا از یک فریمورک که این قابلیت ها داخلش موجود باشه مثل لاراول

    الان از همین mysqli دارم استفاده میکنم
    اگر بخوام از pdo استفاده کنم تمام کدهای کوِئری هام باید تغییر کنه یا فقط نوع کانکشن تغییر میکنه؟

  6. #6

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

    نقل قول نوشته شده توسط esmaeeiilzadeh مشاهده تاپیک
    ممنون از شما بابت راهنمایی
    خب چطوری متوجه بشم که
    real_escape_string_exists فعال هست و اگر نیست اررور بده؟
    اینطوری هم اومدم فانکشنم رو تغییر دادم ولی باز چک کردم همچنان injection وجود داره

    $value = stripslashes($value);          $value = addslashes($value);          $value = htmlentities($value);          $value = mysqli_real_escape_string($this->connection, $value);          return $value;
    بر چه مبنایی می گید sql injection رخ داده لطفا کوئری های خود را لاگ کنید و کوئری مشکل دار را ارسال کنید. فقط از همین mysqli_real_escape_string استفاده کنید و بقیه را حذف کنید.

  7. #7

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

    نقل قول نوشته شده توسط ali_sed مشاهده تاپیک
    بر چه مبنایی می گید sql injection رخ داده لطفا کوئری های خود را لاگ کنید و کوئری مشکل دار را ارسال کنید. فقط از همین mysqli_real_escape_string استفاده کنید و بقیه را حذف کنید.
    چند روز قبل یک هکر کلاه سفید بهمون پیام داد که دسترسی به دیتابیس سایت ما وجود داره. بعد هم اومد یک عکس از دیتابیس های ما رو که با sqlmap بدست آورده بود برامون فرستاد.
    بعد من هم خودم اومدم با Acunetix هم تست کردم که گفت injection وجود داره.
    تمام صفحه های که مثل این بارگذاری میشه رو گفت injection هست. www.domain.com/blog.php?id=1

    بعد من با این فانکشن هم از دیتابیس فراخونی میکنم.
     public static function find_post_by_id($blog_id = 0) {

                global $database;

                    $result_array = self::find_by_sql("SELECT * FROM " . static::$table_name . " WHERE  
    blog_id={$database->escape_value($blog_id)} LIMIT 1");

                    return !empty($result_array) ? array_shift($result_array) : false;
    }

  8. #8

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

    $id = (int) $id; استفاده کن بعد تست بگیر. در ضمن گفتم که مقدار را بین گیومه قرار بده:


    $blog_id = (int) $blog_id;
    $result_array = self::find_by_sql("SELECT * FROM " . static::$table_name . " WHERE
    ;blog_id=\"{$database->escape_value($blog_id)}\" LIMIT 1");

  9. #9

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

    نقل قول نوشته شده توسط ali_sed مشاهده تاپیک
    $id = (int) $id; استفاده کن بعد تست بگیر. در ضمن گفتم که مقدار را بین گیومه قرار بده:


    $blog_id = (int) $blog_id;
    $result_array = self::find_by_sql("SELECT * FROM " . static::$table_name . " WHERE
    ;blog_id=\"{$database->escape_value($blog_id)}\" LIMIT 1");

    ممنون از اینکه جواب میدین.
    بله فرمودین درسته ولی من همون کوئری که میزدم و مشکل داشت رو خدمتتون ارسال کردم.

    الان برای این از (int) $id استفاده کردیم. برای اون هایی که کاراکتر هستن چطور؟
    مثلا یک فرم دارم طرف مشخصات و آدرس و این چیزارو میزنه. خب داخل اون باکس ها هم میشه کد تزریق کرد دیگه. اونارو چطوری کنترل کنم؟

تاپیک های مشابه

  1. امنیت داده ها در برابر sql injection
    نوشته شده توسط p30online در بخش PHP
    پاسخ: 8
    آخرین پست: چهارشنبه 22 آبان 1392, 08:06 صبح
  2. حرفه ای: چه پیشنهادهایی برای جلوگیری از حملات Script Injection دارید
    نوشته شده توسط Mohammadvb6 در بخش ASP.NET Web Forms
    پاسخ: 14
    آخرین پست: چهارشنبه 17 آبان 1391, 22:45 عصر
  3. گفتگو: امنیت فرم و جلوگیری از sql injection و XSS
    نوشته شده توسط maysam.m در بخش PHP
    پاسخ: 6
    آخرین پست: یک شنبه 29 اسفند 1389, 17:02 عصر
  4. روش هایی برای جلوگیری از sql injection
    نوشته شده توسط amirepsilon در بخش PHP
    پاسخ: 1
    آخرین پست: سه شنبه 28 آبان 1387, 07:39 صبح
  5. راهنمایی دررابطه با sql injection
    نوشته شده توسط mkaraminia در بخش SQL Server
    پاسخ: 4
    آخرین پست: چهارشنبه 28 اردیبهشت 1384, 13:44 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •