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

SQL Injection (SQLi) ترفندی است که توسط هکرها برای خراب کردن وب سایت ها استفاده می شود. آنها ورودی های جعلی را به فرم ها یا URL ها اضافه می کنند تا به داده های پایگاه داده یک وب سایت دسترسی پیدا کنند یا آنها را سرقت کنند.
نحوه تشخیص SQL Injection
-
نقل قول تکی (''): یک نقل قول را وارد کنید (
'
) در یک فرم یا URL. در صورت مشاهده خطایی، ممکن است وب سایت آسیب پذیر باشد. -
شرایط همیشه واقعی: سعی کنید وارد شوید
OR 1=1
(همیشه درست است) یاOR 1=2
(همیشه نادرست است) و ببینید آیا سایت رفتار متفاوتی دارد یا خیر. -
تاخیر: از دستوراتی مانند استفاده کنید
SLEEP(5)
ببینید آیا بارگذاری صفحه بیشتر طول می کشد. - تماس های خارجی: تست کنید که آیا ورودی شما باعث می شود سایت به سرور دیگری متصل شود.
مثال: پیدا کردن آیتم های پنهان
به عنوان مثال:
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 ارجاع می دهد.