امنیتعمومی

تزریق به دیتابیس یا SQL injection چیست و راه های مقابله با آن

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

آسیب پذیری هنگامی پیش می آید که ورودی کاربر برای کاراکترهای فرّار رشته ای (String Literal Escape Characters) جاسازی شده در عبارات SQL به اشتباه فیلتر شده اند. بنابراین دستورات SQL از طریق فرم وب برای تغییر محتوای پایگاه داده و یا ارسال اطلاعات برای مهاجم، به پایگاه داده یک برنامه تزریق می شوند.

فرمها و اعتبار آنها

حملات از طریق تزریق به (SQLIA) یکی از ۱۰ آسیب پذیری برنامه های وب توسط پروژه امنیت برنامه های وب در نظر گرفته شده است. روند حمله با توجه به جنبه های فنی حملات شامل ۵ زیرمجموعه اصلی است :

  • حملات کلاسیک از طریق تزریق به SQL
  • استنباط تزریق به SQL
  • برقراری ارتباط با تزریق به SQL
  • حمله به سیستم مدیریت پایگاه داده خاص از طریق تزریق به SQL
  • حملات پیچیده از طریق تزریق به SQL
  • تزریق به SQL + احراز هویت ناکافی
  • تزریق به SQL + حملات DDoS
  • تزریق به SQL + ربودن DNS

تزریق به دیتابیس یا SQL injection چیست و راه های مقابله با آن

پیاده سازی فنی

بررسی اشتباه کاراکترهای فرّار

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

نمونه کد زیر نموه ای از این آسیب پذیری را نشان می دهد :

[pre]

statement <span>=</span> <span>”SELECT * FROM users WHERE name = ‘”</span> <span>+</span> userName <span>+</span> <span>”‘;”</span>

[/pre]

این کد SQL جهت دسترسی به رکورد نام کاربری مشخص ، از جدول کاربران می باشد. اما ، اگر متغیر “username” در یک مسیر مشخص توسط یک کاربر مخرب دستکاری شود ، ممکن است عبارت SQL ، بیش از آنکه طراح کد درنظر دارد تغییرات انجام دهد. به عنوان مثال ، متغیر “username” را به این شکل تنظیم می نماییم :

[pre]
' or '1'='1
[/pre]

و یا از کارکترهای SQL برای جلوگیری از پرس و جوهای اضافی استفاده می نماییم :

[pre]
' or '1'='1' -- '
' or '1'='1' ({ '
' or '1'='1' /* '
[/pre]

اگر این کد در یک رویه احراز هویت مورد استفاده قرار گیرد ، از این پس می توان از آن برای انتخاب یک نام کاربری معتبر اجباری استفاده کرد ، زیرا نتیجه ‘۱’=’۱′ همیشه درست است.

مقدار زیر برای “username” ، در عبارت زیر موجب حذف جدول “users” می شود.

[pre]
a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't
[/pre]

عبارت نهایی SQL این ورودی به شکل زیر است :

[pre]
<span>SELECT</span> <span>*</span> <span>FROM</span> users <span>WHERE</span> name <span>=</span> <span>'a'</span>;<span>DROP</span> <span>TABLE</span> users; <span>SELECT</span> <span>*</span> <span>FROM</span> userinfo <span>WHERE</span> <span>'t'</span> <span>=</span> <span>'t'</span>;
[/pre]

در حالی که اکثر سرورهای SQL ، اجازه اجرای عبارات متعدد با یک فراخوانی توسط این راه را می دهند ، بعضی از برنامه های کاربردی SQL مانند دستور ()mysql_query  در PHP به دلایل امنیتی این اجازه را نمی دهند.

سوالات متداول

SQL Injection که در این مقاله از آن به عنوان تزریق به SQL یاد میشود ، اغلب برای حمله به وبسایت ها استفاده می گردد. این عمل با استفاده از عبارات SQL در ورودی فرم وب ، برای اجرای دستورات SQL برروی پایگاه داده و ارسال این اطلاعات برای مهاجم صورت می گیرد. تزریق به SQL یک تکنیک تزریق کد می باشد که از آسیب پذیریهای نرم افزار وبسایتها استفاده می کند.
آسیب پذیری هنگامی پیش می آید که ورودی کاربر برای کاراکترهای فرّار رشته ای (String Literal Escape Characters) جاسازی شده در عبارات SQL به اشتباه فیلتر شده اند. بنابراین دستورات SQL از طریق فرم وب برای تغییر محتوای پایگاه داده و یا ارسال اطلاعات برای مهاجم ، به پایگاه داده یک برنامه تزریق می شوند.

با کارت بانکی باشگاه ایران هاست پولتان به حسابتان باز می گردد.

همین حالا رایگان عضو شوید

مدیر بلاگ

مشخصات مدیر

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

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

نوشته های مشابه

دکمه بازگشت به بالا