برنامه نویسی

تزریق SQL (SQLi) – انجمن DEV

SQL Injection (SQLi) ترفندی است که توسط هکرها برای خراب کردن وب سایت ها استفاده می شود. آنها ورودی های جعلی را به فرم ها یا URL ها اضافه می کنند تا به داده های پایگاه داده یک وب سایت دسترسی پیدا کنند یا آنها را سرقت کنند.


نحوه تشخیص SQL Injection

  1. نقل قول تکی (''): یک نقل قول را وارد کنید (') در یک فرم یا URL. در صورت مشاهده خطایی، ممکن است وب سایت آسیب پذیر باشد.
  2. شرایط همیشه واقعی: سعی کنید وارد شوید OR 1=1 (همیشه درست است) یا OR 1=2 (همیشه نادرست است) و ببینید آیا سایت رفتار متفاوتی دارد یا خیر.
  3. تاخیر: از دستوراتی مانند استفاده کنید SLEEP(5) ببینید آیا بارگذاری صفحه بیشتر طول می کشد.
  4. تماس های خارجی: تست کنید که آیا ورودی شما باعث می شود سایت به سرور دیگری متصل شود.

مثال: پیدا کردن آیتم های پنهان

به عنوان مثال:

https://example.com/products?category=Gifts
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سایت ممکن است از این دستور برای دریافت محصولات استفاده کند:

SELECT * FROM products WHERE category = 'Gifts' AND released = 1;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این موارد منتشر نشده را پنهان می کند (released = 1 فقط محصولات آماده را نشان می دهد).

کاری که هکرها انجام می دهند:

آنها می توانند URL را به:

https://example.com/products?category=Gifts'--
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار کوئری پایگاه داده به صورت زیر تغییر می کند:

SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این -- بقیه پرس و جو را نادیده می گیرد و نشان می دهد همه محصولات، حتی پنهان.


مثال: همه چیز را نشان دهید

هکرها می توانند با استفاده از موارد زیر همه موارد، حتی دسته های ناشناخته را نشان دهند:

https://example.com/products?category=Gifts'+OR+1=1--
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این یک پرس و جو ایجاد می کند مانند:

SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از آنجایی که 1=1 همیشه درست است، پایگاه داده برمی گردد همه چیز.


مثال: هک ورود

یک فرم ورود به سیستم را در نظر بگیرید که نام کاربری و رمز عبور را بررسی می کند. به طور معمول، ممکن است این کار را انجام دهد:

SELECT * FROM users WHERE username = 'user' AND password = 'pass';
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک هکر می تواند این را به عنوان نام کاربری وارد کند:

user' OR '1'='1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پرس و جو می شود:

SELECT * FROM users WHERE username = 'user' OR '1'='1' AND password = 'pass';
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از آنجایی که 1=1 همیشه درست است، هکر بدون رمز ورود وارد می شود.


مراقب باشید

تست SQLi خطرناک است. دستورات مانند OR 1=1 در صورت سوء استفاده ممکن است داده های مهم را حذف یا تغییر دهد. همیشه وب سایت ها و داده ها را مسئولانه مدیریت کنید.


برای ایمن ماندن، وب سایت ها باید ورودی های کاربر را به درستی بررسی کنند و از شیوه های کدگذاری ایمن استفاده کنند.


تصدیق: این سند به اطلاعات PortSwigger Web Security و ChatGPT ارجاع می دهد.


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

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

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

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