CodeShot
Midسختی 3 از ۵· در 85٪ مصاحبه‌های این حوزه پرسیده شده

SQL Injection چیست و چطور از آن جلوگیری می‌کنیم؟

نشان کردن

پاسخ کوتاه

حمله‌ای که با تزریق کد SQL از طریق ورودی کاربر، رفتار Query اصلی را تغییر می‌دهد؛ راه‌حل استاندارد استفاده از Parameterized Query یا ORM است، نه الحاق مستقیم رشته.

پاسخ کامل

وقتی ورودی کاربر مستقیم داخل متن یک Query الحاق (Concatenate) شود، کاربر می‌تواند با فرستادن کاراکترهای خاص، ساختار Query را تغییر دهد.

راه‌حل: همیشه از Parameterized Query (یا معادل آن در ORM) استفاده کنید — پارامتر همیشه به‌عنوان داده به دیتابیس فرستاده می‌شود، نه بخشی از متن Query، پس هیچ کاراکتری نمی‌تواند ساختار Query را بشکند.

مثال کد

-- ❌ آسیب‌پذیر
"SELECT * FROM Users WHERE Username = '" + username + "'"
-- اگر username برابر باشد با: ' OR '1'='1
-- Query نهایی همه کاربران را برمی‌گرداند!

-- ✅ امن (Parameterized)
SELECT * FROM Users WHERE Username = @username
// با Dapper
connection.Query("SELECT * FROM Users WHERE Username = @Username", new { Username = username });

نکته مهم

منبع کامل موضوع: [SQL Injection — OWASP] و SQL Injection — W3Schools.

اشتباه رایج

❌ فقط «پاک‌سازی» ورودی با حذف چند کاراکتر خاص (مثل تک‌کوتیشن) — راه‌حل واقعی Parameterized Query است، نه فیلتر دستی و ناقص.

شرکت‌هایی که این سؤال را پرسیده‌اند

اسنپدیجی‌کالا