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

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

نشان کردن

پاسخ کوتاه

حمله‌ای که در آن ورودی کاربر مستقیم در متن یک Query SQL ترکیب می‌شود تا مهاجم بتواند دستورات SQL دلخواه اجرا کند؛ راه‌حل اصلی، استفاده از Query پارامتری‌شده یا Stored Procedure است.

پاسخ کامل

وقتی ورودی کاربر مستقیم Concatenate شود، یک مقدار مخرب مثل ' OR '1'='1 می‌تواند منطق شرط WHERE را کاملاً تغییر دهد و به داده‌های غیرمجاز دسترسی بدهد. Query پارامتری‌شده مقدار ورودی را همیشه به‌عنوان "داده" می‌فرستد، نه بخشی از دستور SQL.

مثال کد

// امن
var cmd = new SqlCommand("SELECT * FROM Users WHERE Email = @Email", connection);
cmd.Parameters.AddWithValue("@Email", email);

نکته مهم

Dapper و Entity Framework Core به‌طور پیش‌فرض از Query پارامتری‌شده استفاده می‌کنند و در برابر SQL Injection ایمن‌اند، مگر اینکه SQL خام دستی نوشته شود.

اشتباه رایج

❌ ساخت Query با Concatenate کردن مستقیم رشته‌ها به‌جای پارامتر.