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

چرا کوئری پارامتری تنها راه‌حل قطعی SQL Injection است؟

نشان کردن

پاسخ کوتاه

چون ورودی کاربر همیشه به‌عنوان داده به دیتابیس فرستاده می‌شود، نه بخشی از ساختار دستور SQL که بتواند آن را تغییر دهد.

پاسخ کامل

اگر ورودی مستقیماً با Concatenation در متن SQL قرار بگیرد، مهاجم می‌تواند با ورودی خاص ساختار کوئری را تغییر دهد؛ کوئری پارامتری (یا ORM) این مسیر حمله را کاملاً می‌بندد چون مقدار همیشه جدا از ساختار دستور تفسیر می‌شود.

مثال کد

csharp\nconnection.Query<User>(""SELECT * FROM Users WHERE Username = @u"", new { u = username });\n

اشتباه رایج

اعتماد به Escape دستی کاراکترهای خاص به‌جای استفادهٔ مستقیم از پارامتر.