دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۳
  • آذر

جلسه ۴۱ : تزریق به دیتابیس (Injection) در SQLite

  • دسته‌بندی‌ها :
جلسه ۴۱ : تزریق به دیتابیس (Injection) در SQLite
    • جزئیات
    • نوع محتوااآموزش تصویری

      مقدمه

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

      SQL Injection در SQLite

      در این آموزش با کدنویسی استاندارد برای جلوگیری از تزریق به دیتابیس در SQLite آشنا خواهید شد.

      آشنایی با SQL Injection در SQLite

      تزریق به دیتابیس در SQLiteمعمولا زمان دریافت ورودی از کاربران رخ می دهد.

      برای جلوگیری از SQL Injection در SQLite باید از یک الگوی تطبیق اعتبار سنجی کنید.

      در مثال زیر ورودی دریافتی از کاربران به حروف الفبا، کاراکتر زیر خط دار و طول ورودی بین ۸ تا ۲۰ کاراکتر محدود می شود:

      مثال : 

      برای نشان دادن مشکل، این query را در نظر بگیرید :

      مثال : 

      انتظار می رود کد فوق، یک رکورد را از جدول users که ستون name آن با نام مشخص شده توسط کاربر مطابقت دارد، بازیابی کند.

      در کد فوق $name دریافتی اطلاعات از کاربر است.

      $name می تواند شامل تمام حروف الفبا و فضاهای خالی نیز باشد.

      در اینجا ما ورودی $name را یک دستور DELETE نوشته ایم، که تمام داده ها را حذف می کند!

      برخی از اینترفیس های دیتابیس اجازه ی اجرای query های چندگانه را نمی دهند.

      اما سیستم هایی مانند SQLite و PostgreSQL اجازه ی اجرای چندین query را در یک تابع می دهند، و این یک مشکل امنیتی است.

      جلوگیری از SQL Injection

      شما می توانید تمام کاراکتر های فرار را به صورت هوشمندانه در زبان های برنامه نویسی مانند PERL و PHP اداره کنید.

      SQLite در زبان PHP تابع ()string sqlite_escape_string برای جلوگیری از حملات Injection ارائه می دهد:

      مثال : 

      در کد فوق encoding ورود داده ها را ایمن می سازد.

      اما با استفاده از دستور LIKE به سادگی می توانید با یک مکانیزم الگوی خاص ورودی کاربر را به رشته تبدیل کنید.

      با استفاده از تابع () addcslashes نیز می توانید دامنه ی محدودی از کاراکترها را تعیین کنید.

      کلام آخر

       تزریق به دیتابیس در SQLite یکی از حملات بسیار جدی است که دیتابیس های زبان SQL را تهدید می کند. برای جلوگیری از اینگونه حملات حتما باید از کدنویسی های خاصی در سمت سرور همانند آنچه در مباحث فوق اشاره شد استفاده کنید.

      QR:  جلسه ۴۱ : تزریق به دیتابیس (Injection) در SQLite
      به اشتراک بگذارید