تزریق SQL چیست و چگونه آن می تواند به شما صدمه دیده است؟

>


دانلود مقالات ما گزارش عمق: راهنمای نهایی برای فناوری اطلاعات فروشندگان امنیت

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

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

حملات تزریق SQL یک تهدید امنیتی جدی برای سازمان ها مطرح است. حمله تزريق SQL موفق می تواند در اطلاعات محرمانه بودن و حذف از دست رفته یا دزدیده شده نتیجه; وب سایت های مخدوش بودن; دسترسی به سیستم و یا حساب های غیر مجاز و در نهایت، سازش از ماشین های فردی یا کل شبکه.

چگونه حمله تزريق SQL به آثار

تصور کسی در دادگاه است و خواسته است به نام خود را ارائه. به جای نام واقعی خود را “جو Bloggs” دادن آنها به نام “انتشار جو Bloggs.” مورد می آید، بنابراین bailiff او منتشر قاضی کردن “انتشار جو Bloggs،” تماس می گیرد. https://o1.qnsr.com/log/p.gif?;

این نشان می دهد مفهوم حمله تزريق SQL. به جای نام واقعی، متهم عمدا شکل tes ula نامی است که به عنوان یک دستور منجر به ناخواسته تفسیر اقدام در این مورد، انتشار ناخواسته.

گذاشتن تزریق نمونه

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

ممکن است کد برنامه SQL:

را انتخاب کنید * = از کاربران که در آن نام کاربری رمز عبور و ‘$username’ = ‘$password’

با استفاده از رابط وب حمله وارد کنید ممکن است در صورت درخواست، برای آنها نام کاربری و رمز عبور:

1′ یا ‘1’ = ‘ 1

و

1′ یا ‘1’ = ‘ 1

با وارد کردن این جفت عمدا فرموله شده نام کاربری و رمز عبور، مهاجم است به طور موثر تزریق دو کل یا حل و فصل کردن به پروسه تأیید هویت.

اجازه دهید نگاهی نزدیک تر به مراجعه کنید چگونه.

کد برنامه SQL رشته متن ساده مانند joebloggs برای نام کاربری و دیگر رشته های ساده مانند password123 برای رمز عبور انتظار بود.

آن سپس خط را تجزیه می:

را انتخاب کنید * از کاربران که در آن نام کاربری = ‘$username’ و رمز عبور = “$password”

به

را انتخاب کنید * = از کاربران که در آن نام کاربری رمز عبور و ‘joebloggs’ = ‘ password123

و دسترسی به داده ها برای کاربر joebloggs (اگر یکی وجود دارد) اگر رمز عبور برای آن کاربر password123.

اما مشکل. چه نرم افزار نیست که مهاجم وارد کنید نام کاربری و رمز عبور در این راه با استفاده هوشمندانه از apostrophes فرموله شده بود انتظار داشتم.

نتیجه است که پرس و جو به عنوان تجزیه:

را انتخاب کنید * از کاربران که در آن نام کاربری = ‘1’ یا ‘1’ = ‘1’ و رمز عبور = ‘1’ یا ‘1’ = ‘1’

اگر رمز عبور خود را 1 در حال حاضر نرم افزار دسترسی به داده ها برای هر کاربر و یا اگر 1 = 1. و از وضعیت 1 = 1 است که همیشه درست است، این پرس و جوی SQL همیشه در روند تأیید اعتبار رمز عبور بای پاس شدن منجر شود.

(نمونه کد منبع از OWASP)

در گذاشتن تزریق مثال بالا، دو شرط یا زمانی که برنامه نام کاربری و رمز عبور رشته انتظار بود اما حمله همچنین فرماندهی پایگاه داده مانند رها کردن پایگاه داده، که منجر به از دست دادن تمام اطلاعات را تزریق می تواند تزریق در پایگاه داده ذخیره می شود.

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

برنامه احتمال فرم با بعضی از کد پشت آن به نام در فرم ’employeename’ را قبول داشته باشد. ممکن است قادر به انجام حمله تزريق SQL است که باعث می شود برنامه به اجرا گذاشتن فرمان رها کردن پایگاه داده socsecnumbers، که منجر به حذف و از دست دادن کامل اطلاعات کارمند مخرب (یا حمله خارجی) ذخیره شده در پایگاه.

برای انجام اینکار، به جای ورود به جو Bloggs، مهاجم می تواند نام جو Bloggs وارد کنید ‘); رها کردن پایگاه داده socsecnumbers; — ? نتیجه در فهم برنامه

:

‘جو Bloggs’); رها کردن پایگاه داده socsecnumbers; — ?’

بخش کلیدی این حمله، دوباره، از سوءاستفاده هاي احتمالي علامت است.  نتیجه این “شخصیت پس از جو Bloggs که پایگاه داده فکر می کند آن دریافت نام آن در انتظار به پایان رسید است. از آنجا که شخصیت های بیشتر وارد کرده اید، آن تصمیم می گیرد باید آنها را به عنوان کد SQL تفسیر. The); بنابراین پایگاه داده اجرا فرمان socsecnumbers رها کردن پایگاه داده که عبارت زیر بلافاصله اعدام باید معنی.

هنوز هم خواهد انتهایی ‘ بنابراین برای جلوگیری از بودن نام مشکل که وارد کد استفاده شده است که مهاجم با؛–چون به پایان می رسد; معنای حمل در اجرای قسمت بعدی نام، و–پایگاه داده برای دادن در آن خط چون بقیه این بیانیه باید به درمان به عنوان نظر می گوید.

فقط کار تزریق امنیت

گذاشتن حملات تزریق SQL هنگامی که برنامه به اجرای کد زیرا آن دریافت ورودی کاربر در فرم نیست انتظار فریب خورده است. این بدان معناست که حیاتی گذاشتن تزریق اقدام امنیتی انجام داده sanitization و اعتبار است. این به طور موثر لایه بازرسی به اطمینان حاصل شود که هر گونه اطلاعات ارائه شده غیر معمول است و ممکن است خطر تزریق SQL کیسه می افزاید.

Sanitization معمولا شامل اجرای هر گونه اطلاعات ارائه شده از طریق تابع (مانند خروجی زیر را mysql_real_escape_string تابع ()) اطمینان حاصل شود که هر شخصیت های خطرناک مانند ‘ به SQL سوال در داده ها منتقل شوند.

که در آن شامل اضافه کردن کد است که در تلاش برای اطمینان حاصل شود که هر گونه اطلاعات را مشاهده کنید در فرم است که انتظار می رود در نمونه های خاص که اعتبار کمی متفاوت است. در ابتدایی ترین سطح این اطمینان که حاوی آدرس ایمیل شامل “@” ثبت، زمانی که داده های عددی (مانند کد پستی) انتظار می رود که تنها رقم عرضه شده، و که طول قطعه داده ارسال شده بیش از حداکثر طول مورد انتظار است (بنابراین s شماره تامین اجتماعی نیست بیش از 9 رقمی باید باشد).

اعتبار سنجی اغلب انجام به دو روش: توسط شخصیت های خطرناک و یا ناخواسته blacklisting و whitelisting شخصیت تنها کسانی که در شرایط داده شده مجاز، که می تواند شامل کار بخشی از برنامه های. اگر چه ممکن است اعتبار محل در سمت سرویس گیرنده، هکرها می تواند تغییر و یا دریافت اطراف این، پس از آن ضروری است که تمام داده است دارای اعتبار در سمت سرور نیز به منظور کاهش خطر تزریق SQL.

برای مطالعه بیشتر در برای راه های بیشتری برای کاهش خطر تزریق SQL.

این به روز رسانی 23 ژوئن سال 2016 مقاله

.