تبلیغات در اینترنت

تبلیغات در اینترنتگیفت کارت گوگل پلی
نمایش نتایج: از 1 به 4 از 4

موضوع: ارور Injection چیست و چگونه از inject شدن جلوگیری کنیم!

  1. Top | #1
    کاربر سایت

    تاریخ عضویت
    Apr 2011
    ورژن ویبولتین
    چهار دیواری اختیاری ، کاری داشتی؟ :f:
    نوشته ها
    666
    مورد پسند
    543 بار
    اطلاعات
    میزان امتیاز
    82

    پیش فرض ارور Injection چیست و چگونه از inject شدن جلوگیری کنیم!

    باگ sql زمانی رخ می دهد که برنامه نویس داده های ورودی را بدون کنترل مورد پردازش قرار دهد. نفوذگران از همین موضوع استفاده کرده و کنترل کامل سرور و یا تمامی سرور های موجود در آن شبکه را تحت کنترل خود در می آورند. پس هرکدی که از ورودی های کاربر برای جستجو در بانک اطلاعاتی بدون بررسی استفاده شود احتمال یک حمله موسوم به SQLI را دارد.
    حال خواه این ورودی از طریق URL باشد( متد GET). خواه از طریق ارسال پست(متد POST).


    در زیر شما کد مستعد SQLI را مشاهده می نمایید:

    کد:
    <?php $q="select * from TABLE where id=".$_GET['id']; $q1=mysql_query($q); ?>
    همانطور که مشاهده می کنید این کد همان ورودی که از URL را دریافت میکند به طور مستقیم مورد پردازش قرار می دهد و این یعنی نفوذگر می تواندبه طور مستقیم دستورات خود را وارد نماید تا توسط سرور مورد پردازش قرار گیرد. این یعنی فاجعه! زیرا باگ SQLI یکی از خطرناک ترین باگهاست.

    اگر نفوذگر کد زیر را به انتهای URL خود وارد کند چه اتفاقی می افتد؟؟؟

    کد:
    union+select+user+from+admin
    بوسیله دستور union دو دستور select را به هم اضاف می کند و باعث می شود یوزرهایی که در جدول ادمین قرار دارند را مشاهده کند!


    روش های جلوگیری از حمله:

    1- روش های رایج و معمول: در خیلی از مواقع تاکتیکی که خیلی از دوستان برنامه نویس برای جلوگیری از حمله انجام می دهند، تاکتیک چک کردن ورودی و تبدیل آن به کاراکتر های دیگه!

    مثلا تبدیل کدهای ورودی به نوع int و گرفتن ورودی به صورت عددی... و یا اضافه کردن یک کاراکتر / به ورودی و...

    کد زیر را در نظر داشته باشید:

    کد PHP:
    <?php
    $q
    ="select * from TABLE where id=".$_GET['id'];
    $q1=mysql_query($q);
    ?>

    روشهای معمول ایمن سازی به صورت زیر است:

    1-استفاده از تابع int:
    کد اصلاح شده با این متد:
    کد PHP:
    <?php
    $id
    =(int)$_GET['id'];
    $q="select * from TABLE where id='".$id."'";
    $q1=mysql_query($q);
    ?>

    2- اعتبار سنجی ورودی به وسیله تابع ctype_digit() که تقریبا کار بالا رو انجام میده:
    کد اصلاح شده با این متد:

    کد PHP:
    <?php
    $id
    =$_GET['id'];
    if(isset(
    $id) AND ctype_digit($id)){
    $q="select * from TABLE where id='".$id."'";
    $q1=mysql_query($q);
    }
    ?>

    3- استفاده از escape
    کد اصلاح شده با این متد:
    کد PHP:
    <?php
    $id
    =$_GET['id'];
    $q="select * from TABLE where id='".mysql_real_escape_string($id)."'";
    $q1=mysql_query($q);
    ?>

    این کد تمامی ورودی های مضر را خنثی می کنه!
    متد escape روش های دیگه هم داره که خیلی ایمن نیستند اما من بخاطر اینکه تاپیک جامع هست آنها را می آورم:
    استفاده از تابع addslash , str_replace:

    کد PHP:
    <?php
    $id
    =$_GET['id'];
    $q="select * from TABLE where id='".addslashes($id)."'";
    $q1=mysql_query($q);
    ?>

    این روش یک / به کد ورودی اضفه می کنه...

    و برای str_replace:

    کد PHP:
    <?php
    $id
    =$_GET['id'];
    $q="select * from TABLE where id='".str_replace("'","''",$id)."'";
    $q1=mysql_query($q);
    ?>

    همانطور که می دانید این یک تابع تبدیل هست و آرگومنت اول را به آرگومنت دوم تبدیل می کنه...



    افزونه ی PDo



    2- استفاده از پردازش های آماده بوسیله افزونه PDO
    قبل از هر چیز توضیح مختصری درباره PDO را ارائه می دهم سپس به نحوه ایمن سازی با این متد می پردازیم...
    PDO یک افزونه مخصوص کار با بانک های اطلاعاتی در php است که از نسخه 5.1 به php اضافه شده است. از ویژگی این افزونه میتوان به:

    1- به صورت شی برنامه نویسی شده است.
    2- تقریبا از بسیاری از بانک های اطلاعاتی پشتیبانی می کند.

    اشاره نمود...

    این افزونه از سه کلاس تشکیل شده که این سه کلاس شامل: 1- کلاس اصلی(PDO) که حاوی توابع اصلی است 2- کلاس PDOStatement برای پردازش های مربوطه 3- کلاس PDOException برای کنترل خطاهای احتمالی.

    با این پیش زمینه شروع می کنیم...

    این روش یک روشی است که می تواند در بین برنامه نویسان به جای روش های سنتی مورد استفاده قرار گیرد... در این روش برنامه نویس مجبور است تا ابتدا کد SQL را مشخص کند و سپس هر پارامتر را به جتسجو بفرستد. این شیوه کد نویسی به بانک اطلاعاتی اجازه می دهد تا صرف نظر از ورودي کاربر کد و اطلاعات را از یکدیگر تمیز دهد.
    جملاتی که از قبل تعریف شده باشند اطمینان لازم را جهت استفاده برنامه نویس دارند تا هکر نتواند دستورات مخرب خود را وارد نماید...

    مثال قبل را در نظر بگیرید:
    کد PHP:
    <?php
    $q
    ="select * from TABLE where id=".$_GET['id'];
    $q1=mysql_query($q);
    ?>

    برای استفاده از این کد در PDO به صورت زیر عمل می کنیم:
    کد PHP:
    $db = new PDO('mysql:dbname=mydatabase;host=localhost', 'db_username', 'db_password');

    ابتدا ارتباط خود را با پایگاه داده برقرار می کنیم...

    کد PHP:
    $stmt = $db->prepare("SELECT * FROM TABLE WHERE id=:id");

    با استفاده از متغیر stmt$ که یک نمونه از کلاس PDOStatement می باشد در خواست را ارسال نموده ایم. سپس

    کد PHP:
    $stmt->bindParam(':id', $id);

    ورودی را مشخص می نماییم.

    و در نهایت این در خواست را اجرا می کنیم:
    کد PHP:
    $stmt->execute();

    نکته: شما قبل از استفاده از این کلاس باید اطمینان حاصل نمایید که این افزونه را فعال کرده باشید.
    برای این موضوع محتویات فایل php.ini را ویرایش نمایید. برای این کار فایل php.ini را باز کرده و به دنبال extension=php_pdo_mysql.dll بگردد و پردازش آن را فعال نمایید به وسیله حذف کاراکتر ";".
    اگر شما از پایگاه داده دیگری استفاده می کنید باید افزونه مربوط به این بانک اطلاعات را فعال نمایید...


    روش های کم اهمیت تری هم برای جلوگیری از حملات sql وجود داره که من فق این روش ها رو به اختصار نام می برم...



    1- بررسی ورودی کاربر از لیست سیاه: در این روش کاراکتر های مورد استفاده در حملات موسوم به sqli را در درون یک فایل ریخته و ورودی کاربر را به وسیله این کاراکترها بررسی نماییم و اگر مطابقت داشت بلوکه گردد./ هرچند روشی برای جلوگیری به شمار می آید ولی پیشنهاد می شود از روش همراه روش های دیگر استفاده کنید. مثلا می توانید تعین کنید که اگر کاربر از کاراکتر " استفاده کرد صفحه اخطاری به او نمایش داده شود./

    2- عدم نمایش خطاهای احتمالی به کاربر: به یاد داشته باشید که اخطارهای نمایش داده شده به کاربر می تواند دست شما را رو کند./ این اخطارها به کاربر کمک می کند تا از وضعیت سرور شما آگاه شود./

    3- محدودیت در انجام عملیات حساس توسط برنامه تحت وب: این روش به ما می گوید که برنامه وب نباید برای پردازش های مربوطه بیشترین سطح اختیار را داشته باشد مگر در جاهای حساس./ مثلا اگر نفوذگر بتواند دستورات را اینجکت نماید با این محدودیت دیگر قادر به انجام عملیات خطرناکتر مانند update جداول نباشد...

    4- اگر به دیتا سنتر دسترسی دارید و ادمین شبکه هستید بهترین کار جداسازی سرور وب از بانک اطلاعاتی است چرا که نفوذگر با نفوذ به سرور وب دیگر قادر به صدمه زدن به بانک اطلاعاتی نباشد و برای حمله دچار دردسر شود...

    5- روش های ابتکاری خودتون: هیچگاه خودتون رو دست کم نگیرید و سعی کنید که همیشه به دنبال راههای تازه برای حل مسائل باشید...


    نکته ی 1 : اگر در سایت خود اروری شبیه به متن زیر دریافت کردید سعی کنید با دروسی که هم اکنون یاد گرفتید آن را یرطرف سازید:



    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/****/domains/shayangold.com/public_html/page.php on line 11


    با تشکر!

    3 تشکر توسط:

    به دلیل مشکلات پیش آمده از کاربران عزیز تقاضا دارم به هیچ وجه به کاربری که از او شکایت شده است اعتماد نکنید و سعی کنید درخواست های خود را از مدیر کل و یا کاربران مورد اعتماد دیگر کنید و به هیچ وجه اعتمادی به بنده ی شکایت شده نداشته باشید! ( تا اطلاع ثانوی مشکوک، مسدود و مزنون می باشیم)
    با تشکر
    Vwolf

    وطن فروش اونایی هستن که هزار ساله سعی می کنن فرهنگ عرب های بادیه نشین رو جایگزین فرهنگ اصیل ایرانی کنن .
    این جا رو کلیک نکن !




  2. گیفت کارت آیتونز

  3. Top | #2
    مدیریت کل سایت

    تاریخ عضویت
    Aug 2009
    ورژن ویبولتین
    4.2.2
    نوشته ها
    21,685
    مورد پسند
    54,811 بار
    نوشته های وبلاگ
    14
    اطلاعات
    میزان امتیاز
    3117

    پیش فرض

    ویبولتین و اسکریپت های مشابه مثل مای بی بی و .. از این طریق معمولاً هک نمیشن .

  4. Top | #3
    کاربر سایت

    تاریخ عضویت
    Apr 2011
    ورژن ویبولتین
    4
    نوشته ها
    5
    مورد پسند
    4 بار
    اطلاعات
    میزان امتیاز
    0

    پیش فرض

    باگه خیلی تابلوییه سیستم های معروف به این آسونی هک نمیشن و اولین کار بستن این فرمان هاست ولی این متد کمی پیچیده ترش دلیل ارائه پتچ از سیستم های انجمن ساز. مدیریت محتوا و... همواره میشه

  5. Top | #4
    کاربر سایت

    تاریخ عضویت
    Apr 2011
    ورژن ویبولتین
    چهار دیواری اختیاری ، کاری داشتی؟ :f:
    نوشته ها
    666
    مورد پسند
    543 بار
    اطلاعات
    میزان امتیاز
    82

    پیش فرض

    علی جان کار از محکم کاری عیب نمی کنه!
    همیشه نباید در انتظار این بود و گفت که ولش کن بی خیال سایت من امنه!
    به دلیل مشکلات پیش آمده از کاربران عزیز تقاضا دارم به هیچ وجه به کاربری که از او شکایت شده است اعتماد نکنید و سعی کنید درخواست های خود را از مدیر کل و یا کاربران مورد اعتماد دیگر کنید و به هیچ وجه اعتمادی به بنده ی شکایت شده نداشته باشید! ( تا اطلاع ثانوی مشکوک، مسدود و مزنون می باشیم)
    با تشکر
    Vwolf

    وطن فروش اونایی هستن که هزار ساله سعی می کنن فرهنگ عرب های بادیه نشین رو جایگزین فرهنگ اصیل ایرانی کنن .
    این جا رو کلیک نکن !

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

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

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

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

  1. کمک واسه لیست کاربران
    توسط nitro در انجمن پرسش و پاسخ
    پاسخ: 15
    آخرين نوشته: 2011/12/21, 03:47 PM
  2. مشاهده لیست ایمیل کاربران
    توسط ariafar در انجمن پرسش و پاسخ
    پاسخ: 1
    آخرين نوشته: 2011/11/15, 07:14 PM
  3. دامین رو ثبت کردم ولی رنک الکسای اون معلوم نیست
    توسط amirghaemi در انجمن پرسش و پاسخ
    پاسخ: 2
    آخرين نوشته: 2011/09/03, 01:41 AM
  4. این ارور چیست ؟
    توسط firoz در انجمن پرسش و پاسخ
    پاسخ: 2
    آخرين نوشته: 2011/04/22, 03:56 PM
  5. گرافیست (طراحی حرفه ای)
    توسط Photo Maker در انجمن درخواست های گرافیکی ( درجه ، هدر ، بنر و .. )
    پاسخ: 2
    آخرين نوشته: 2011/02/03, 11:37 AM

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

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

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

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