دسته بندی
Injection Attacks
باگ SQL Injection یکی از معروف ترین باگ ها هست که احتمالا اسمش به گوشتون خورده.این باگ یک نوع باگ امنیتی است که در وبسایتها و برنامههایی که با دیتابیس ها ارتباط برقرار میکنند، رخ میدهد. در این حمله، حملهکننده با وارد کردن کدهای مخرب به فیلدهای ورودی یا پارامترهای
URL وبسایت، توانایی اجرای دستورات SQL مخرب را به دیتابیس مییابد. این کار میتواند منجر به دسترسی غیرمجاز به اطلاعات حساس، حذف دادهها یا انجام عملیاتهای خرابکارانه شود.مثال:
فرض کنید یک وبسایت دارای صفحهای است که کاربران میتوانند با وارد کردن نام کاربری خود، اطلاعات حساب کاربری خود را مشاهده کنند. وبسایت ممکن است از دیتابیسی استفاده کند که دارای جدولی با نام "
users" است. حالا فرض کنید کد PHP این صفحه به صورت زیر باشد:$username = $_POST['username'];حملهکننده میتواند در فیلد ورودی نام کاربری خود را وارد کند و در عین حال یک دستور
$query = "SELECT * FROM users WHERE username='$username'";
SQL مخرب به طور همزمان وارد کند. به عنوان مثال:' OR '1'='1' --پس از اجرای کوئری، دستور
SQL به شکل زیر تبدیل میشود:SELECT * FROM users WHERE username='' OR '1'='1' --'این دستور
SQL به معنی "انتخاب همه ردیفها از جدول کاربران (users) در صورتی که '1' برابر با '1' باشد" است. همچنین، بخش -- کامنت کننده باقیماندهی دستور SQL است و هر چیزی پس از آن نادیده گرفته میشود.روش های جلوگیری:
1- استفاده از
Prepared Statements میتواند از تزریقهای SQL جلوگیری کند. در Prepared Statements، جدا از دستور SQL اصلی، پارامترها به صورت جداگانه ارسال میشوند و در زمان اجرای کوئری جایگزین مقادیر ورودی میشوند.2- برنامهنویسان باید ورودیها را با دقت فیلتر سازی و تقویت کنند. این کار شامل حذف و یا اسکیپ کردن کاراکترهای غیرمجاز است.
3- اطمینان حاصل کنید که کاربران و برنامهها فقط به سطح دسترسی لازم برای انجام کارهای خود دسترسی دارند.
4- اطلاعات خطا در وبسایتها نباید جزئیاتی از دیتابیس یا سیستم را فاش کند.
5- مطمئن شوید که نسخههای مورد استفاده از دیتابیس و کتابخانههای آن بهروز هستند.
.