SQL Injection چیست ؟

SELECT * FROM CustomerOrder WHERE CustomerName=’@pUserInput’

که @pUserInput پارامتر دریافت شده از کاربر است حال اگر کاربر قصد برنامه ریزی یک حمله را داشته باشد می تواند رشته ای با فرمت زیر را به عنوان نام طرف حساب به برنامه ارائه کند:

 Mohammad’; DELETE FROM CustomerOrder—

دستور SQL که به سرور SQL ارسال می شود به صورت زیر خواهد بود:

 SELECT * FROM CustomerOrder WHERE CustomerName=’ Mohammad’; DELETE FROM CustomerOrder—

ارسال این دستور به SQL سرور حاصلی جز حذف کلیه طرف حسابهای ثبت شده در پایگاه داده نخواهد داشت. توجه داشته باشید که (;) به مفهوم پایان یک دستور و شروع یک دستور دیگر بوده و (–) به مفهوم آنست که مابقی عبارت بعد ازبرای SQL به منزله کامنت تلقی خواهد شد.

ورودی های sql injection کجا هستند؟

ورودی اطلاعات به سایت شما معمولا کنترل هایی شبیه textBox , MemoBox , ComboBox  و نظیر اینها هستند. ولی کنترلی که کاربر بتواند در آن کد بنویسد تکس باکس می باشد. همچنین خروجی برخی صفحات شما ورودی صفحه دیگریست که اطلاعات صفحه قبل را با queryString می گیرد.

۱٫     ورودی از تکس باکس textBox

۲٫     ورودی از آدرس بار QueryString

چگونه از sql injection جلوگیری کنیم؟

جهت جلوگیری از حملات از نوع SQL Injection باید تمامی اطلاعاتی که توسط برنامه از کاربر دریافت می شود به دقت ارزیابی و محتوای مشکوک و مخاطره آمیز پذیرش نشود. رعایت موارد زیر می تواند به طور قابل قبولی از حملات SQL Injection جلوگیری نماید:

۱–     سایز و نوع دیتا دریافتی کنترل و محدودیت های وابسته به نوع اطلاعات موردنظراعمال شود.

۲–     محتوای دیتا کنترل و از پذیرش اطلاعات باینری،کاراکترها یک امنتو … خود داری شود.

۳–     هیچگاه به طورمستقیم از دیتای وارد شده توسط کاربر دستورSQL ساخته نشود.

۴–     کاراکترهای خاص نظیر(;),(‘),(–),(xp_),(/*  */) در اطلاعات دریافت شده از کاربر پذیرش نشده و یا به نحو مناسب جایگزین شود.

۵–    سایزونوع پارامترهای ورویSP ها کنترل شود.

نکته ۱: اطلاعات دریافتی الزام به طور مستقیم از کاربر دریافت نمی شود و می تواند شامل اطلاعاتی باشد که قبلا در جداول پایگاه داده ذخیره شده است.

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

۱سعی کنید تا می توانید اطلاعات مهم را از طریق queryString پاس ندهید و از جایگزین هایی مانند Session، static variables , cooki و … استفاده کنید. ولی آی دی ها را از طریق queryString بفرستید، چرا که در موتورهای جستجو صفحات جداکانه برای سایتتان محسوب شود.

۲حال فرض کنید مجبورید اطلاعات را از queryString پاس بدهید. در این صورت بهترین و مطمان ترین راه این است که داده ها را به صورت پارامتری در sql اجرا کنید تا مشکل هک بوجود نیاید. پارامتر مزیتی که دارد این است که هکر هرچقدر هم کد بنویسد و هر کدی بنویسد فقط به عنوان یک پارامتر ورودی در sql محسوب می شود و بخشی از دستور نمی شود. این موضوع در مورد تکس باکس ها هم وجود دارد.

 

دیدگاه‌تان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *