SQL Injection زمانی رخ میدهد که ورودی کاربر بدون پاکسازی مستقیم وارد یک کوئری دیتابیس میشود و مهاجم میتواند ساختار کوئری را تغییر دهد.
یک مثال ساده
فرض کنید کوئری بهشکل SELECT * FROM users WHERE username = '{input}' ساخته شود. اگر کاربر مقدار ' OR '1'='1 وارد کند، شرط همیشه true میشود و کل جدول برمیگردد.
چرا هنوز رایج است؟
با وجود شناختهشدهبودن این حمله از دههی ۹۰ میلادی، هنوز در فهرست OWASP Top 10 قرار دارد؛ عمدتاً بهخاطر کد قدیمی یا استفادهی نادرست از ORM.
راهحل قطعی
همیشه از Parameterized Query یا ORM استفاده کنید؛ هرگز رشتهی SQL را با concatenation یا f-string نسازید. علاوه بر این، اصل کمترین دسترسی را برای کاربر دیتابیس اپلیکیشن رعایت کنید.
هرگز ورودی کاربر را مستقیماً به کوئری SQL اضافه نکنید.