نمایش نتایج: از شماره 1 تا 5 , از مجموع 5

موضوع: مقاله امنيت :: ‌Sql injection

  1. #1
    عضو دائم Rezash آواتار ها
    تاریخ عضویت
    Feb 2010
    محل سکونت
    مشهد
    نوشته ها
    1,923
    تشکر تشکر کرده 
    889
    تشکر تشکر شده 
    2,385
    تشکر شده در
    1,535 پست

    پیش فرض مقاله امنيت :: ‌Sql injection

    سلام
    در اين مقاله قصد دارم اطلاعات و تجربيات خودم و بهمراه ضميمه اي از چند آموزش كاربردي در زمينه تزريق به پايگاه داده رو بروي كاغذ(در اينجا مانيتور!)‌بيارم.
    ما در برنامه هاي خودمون بسته به نياز Query ها متفاوتي رو داريم كه غالبا با توجه به مفهوم ديناميك بودن صفحات در يك سايت ديناميك ، كوئري هاي ما با توجه به مقادير ورودي كاربر تغيير مي كنند.
    حال اگر ورودي هاي دريافتي از كاربران به صورت صحيح فيلتر نشوند و مستقيما در كوئري استفاده بشند برنامه رو با خطرات زيادي روبرو مي كنند !
    خيلي سريع ميريم سر اصل مطلب
    فرض كنيد براي يك فرم لوگين دو مقدار يوزر نيم و پسورد رو از كاربر به شكل زير دريافت مي كنيم
    کد PHP:
    <?php
    $user 
    $_POST['user'];
    $pass $_POST['pass'];
    $result mysql_query("SLECT * FROM `table` WHERE `user`='$user' AND `pass`='$pass'");
    if(
    mysql_num_rows($result) > 0)
    {
    echo 
    "Logged in";
    }
    Else
    {
    echo 
    "Wrong Info";
    }
    ?>
    به نظر مياد كه همه چيز درست و صحيح هست و هيچ مشكلي در برنامه وجو نداره ، اما اين حرف تا زماني درست هست كه كاربر شيطنت نكنه !
    فرض كنيم كاربر در فرم لوگين اطلاعات خودش رو به صورت زير وارد كند :
    کد:
    user : test
    Pass : ' or '1'='1
    نتيجه كوئري ما ميشود :
    کد PHP:
    "SLECT * FROM `table` WHERE `user`=' test ' AND `pass`='' or '1'='1'" 
    ترجمه به فارسي : انتخاب كن ركوردهايي را از جدول با نام table كه مقدار فيلد user در آن ها test باشد و فيلد رمز عبور تهي باشد يا 1 برابر 1 باشد.
    قطعا هممون مفهموم "يا" رو مي دونيم !و همينطور مي دونيم كه در منطق عدد يك با يك برابر هست...
    پس ركوردهاي انتخابي ما هميشه يزرگتر از 0 هست و شرط لاگين بودن كاربر بر قرار ميشه...
    مثال 2 : فرض كنيم در يك سايت پرسش و پاسخ سوالهاي محرمانه (!) ، در پايان كار يك كد رهگيري عددي به هر كاربر ارائه ميشه كه يك كاربر صرفا با داشتن كد رهگيري و شماره سوال ميتونه به پاسخ و وضعيت سوال خودش دسترسي داشته باشه
    بنابراين كدي مشابه كد لوگين خواهيم داشت ...
    کد PHP:
    <?php
    $id 
    $_POST['id'];
    $code $_POST['code'];
    $result mysql_query("SLECT * FROM `questions` WHERE `id`='$id' AND `code`='$code'");
    if(
    mysql_num_rows($result) > 0)
    {
    echo 
    "Show Codes Informations";
    }
    else
    {
    echo 
    "Wrong Info";
    }
    ?>
    ورودي هاي كاربر :


    کد:
    id : 123
    code : ' or '1'='1
    مجددا كوئري ما طبق حالت قبل ميشه و ركورد مورد نظر انتخاب ميشه.
    در اينجا مثال ها دقيقا مثل هم بودند.هدف من از زدن مثال 2 وم اين بود كه اولين و مهمترين نكته رو در جلوگيري از نفوذ هاي مخرب بگيريم...
    در مثال اخير كد رهگيري و شناسه سوال هر دو عدد بودند اما ورودي هاي كاربر ما چيزي جز عدد بودند. يعني اگر ورودي ها رو محدود به عدد كرده بوديم كاربر نمي تونست كاري از پيش ببره...
    * هميشه در كوئري هامون فقط نوع داده مورد نياز رو بپذيريم.
    در اينجا كافي بود من با يك شرط ساده از صحت عددي بودن دو مقدار ورودي اطمينان حاصل مي كردم.
    مثال :

    کد PHP:
    <?php
    $id 
    $_POST['id'];
    $code $_POST['code'];
    If(!
    is_numeric($id) OR !is_numeric($code))
    die(
    'Salam pesaram ! inja sql injection kar nemide ! '); 
    $result mysql_query("SLECT * FROM `questions` WHERE `id`='$id' AND `code`='$code'");
    if(
    mysql_num_rows($result) > 0)
    {
    Echo 
    "Show Codes Informations";
    }
    Else
    {
    Echo 
    "Wrong Info";
    }
    ?>
    ===
    استفاده از Sql Injection هميشه به اين سادگي نيست و بعضا نياز به مهارت هاي خاص و آشنايي كافي با دستورات Sql دارد.
    علامت -- به معناي كامنت (توضيحات) هست و دستورات خط جاري ، بعد از اين علامت به عنوان توضيحات در نظر گرفته ميشند.
    براي مثال ما در اينجا قصد داريم از روي يك كوئري تعداد ستون هاي يك جدول رو بدست بياريم.يا نام جداول رو حدث بزنيم.
    مثالي رو كه ميزنم دقت كنيد :

    کد PHP:
    SELECT FROM table WHERE test '$input'
    وردي :
    کد HTML:
    'x' AND 1=(SELECT COUNT(*) FROM table); --'
    نتيجه :
    کد PHP:
    SELECT *  FROM table  WHERE test 'x' AND 1=(SELECT COUNT(*) FROM table); --'; 
    در اين مثال ما مي تونيم با تغيير عدد 1 از تعداد ستون ها ، و با تغيير table به صورت حدسي از جداول موجود در يك ديتابيس مطلع بشيم.
    از اونجا كه اين مقاله براي امنيت هست و نه آموزش هك از پرداختن به جزييات هك كردن خودداري كردم و مي كنم و فقط يك توضيح كاملا ابتدايي رو در اين زمينه خدمتتون عرض كردم.
    خطرات زياد تري از يك لوگين كردن ساده و بيرون كشيدن نام جداول وجود داره، به طوري كه با كمي فراهم سازي پيش زمينه براي نفوذ شما به هكر اختيارت تام در DROP كرد يا INSERT و UPDATE كردن يا دانلود تمام محتويات ديتابيس خودتون رو خواهيد داد.
    * اگر فرصت كنم يك سايت دمو و مشكل دار براي تست عملي روش هاي مختلف SQL INKECTION بالا ميارم (دومين كه زياد دارم، هاست رايگان سي پنلم فراوان ! :D ) و يك آموزش مختصر تصويري هم تهيه مي كنم.
    *اين مقاله ادامه دارد -- اين فقط مقدمه بود !
    لطفا از ارسال پست هاي اسپم خودداري كنيد تا ادامه مطلب رو در اولين فرصت بنويسم و ارسال كنم.
    سعي مي كنم ادامه رو تصويري تر و عملي تر دنبال كنيم.
    سپاس
    بک آپ بگیرید قبل از آنکه پشیمان شوید!
    تشخیص سیستم مدیریت محتوای سایت - سایت شخصی

  2. تعداد تشکر ها ازRezash به دلیل پست مفید


  3. # ADS




     

  4. #2
    عضو دائم Woshka آواتار ها
    تاریخ عضویت
    Apr 2009
    نوشته ها
    1,456
    تشکر تشکر کرده 
    55
    تشکر تشکر شده 
    1,524
    تشکر شده در
    1,078 پست

    پیش فرض پاسخ : مقاله امنيت :: ‌Sql injection

    منبع
    کتاب
    packt publishing mode security
    فروش سرور مجازی
    http://www.maroonhost.net/vps-hosting.html
    مارون هاست
    برای خرید سرور تماس بگیرید 09123773197

  5. #3
    عضو دائم Rezash آواتار ها
    تاریخ عضویت
    Feb 2010
    محل سکونت
    مشهد
    نوشته ها
    1,923
    تشکر تشکر کرده 
    889
    تشکر تشکر شده 
    2,385
    تشکر شده در
    1,535 پست

    پیش فرض پاسخ : مقاله امنيت :: ‌Sql injection

    نقل قول نوشته اصلی توسط Woshka نمایش پست ها
    منبع
    کتاب
    packt publishing mode security
    معرفي منبع بود يا منبع اين نوشته !؟
    اگر منبع نوشته بود بايد بگم خودم نوشتم + كمك از چند منبع آنلاين كه در آخر آموزش لينك هاي دقيقشون رو مي ذارم و در اول هم اشاره كردم :
    در اين مقاله قصد دارم اطلاعات و تجربيات خودم و بهمراه ضميمه اي از چند آموزش كاربردي
    نمونه انجمن هاي رايت كليك،آشيانه،ترفندستان و منبع اصلي چند سايت خارجي هست.
    حالا اگه لينك دانلود اين كتاب رو داشتيد بذاريد لطفا شايد بدرد آموزشمون بخوره.
    سپاس
    بک آپ بگیرید قبل از آنکه پشیمان شوید!
    تشخیص سیستم مدیریت محتوای سایت - سایت شخصی

  6. تعداد تشکر ها ازRezash به دلیل پست مفید


  7. #4
    کاربر اخراج شده
    تاریخ عضویت
    Nov 2010
    نوشته ها
    85
    تشکر تشکر کرده 
    96
    تشکر تشکر شده 
    55
    تشکر شده در
    48 پست

    پیش فرض پاسخ : مقاله امنيت :: ‌Sql injection

    رضای عزیز ، اگه مقدوره ادامه بدید

  8. #5
    عضو انجمن
    تاریخ عضویت
    Aug 2009
    نوشته ها
    191
    تشکر تشکر کرده 
    245
    تشکر تشکر شده 
    346
    تشکر شده در
    303 پست

    پیش فرض پاسخ : مقاله امنيت :: ‌Sql injection

    خیلی حرفه ای هست
    مشتاق ادامه آموزش

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. مشکل sql injection
    توسط rezah در انجمن PHP-MySQL
    پاسخ ها: 2
    آخرين نوشته: November 19th, 2017, 13:50
  2. جلوگیری از هک sql injection
    توسط mashhadweb در انجمن PHP-MySQL
    پاسخ ها: 5
    آخرين نوشته: March 18th, 2015, 17:23
  3. جلوگیری از حملات Sql injection
    توسط yastheme در انجمن PHP-MySQL
    پاسخ ها: 1
    آخرين نوشته: November 10th, 2013, 11:42
  4. sql injection
    توسط 0senjed0 در انجمن سوالات و مشکلات
    پاسخ ها: 2
    آخرين نوشته: August 16th, 2012, 17:46
  5. براي جلوگيري از هک از طریق Sql injection باید چکار کرد!
    توسط robot در انجمن سوالات و مشکلات
    پاسخ ها: 2
    آخرين نوشته: June 17th, 2011, 18:05

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

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