SQL Injection Hâlâ Bitmedi
FromSqlRaw ve string birleştirme

Arama kutusunu FromSqlInterpolated yerine FromSqlRaw($"... WHERE title ILIKE '%{q}%'") ile bağladım. q içine tırnak gelince filtre bozuldu. Bozulma şanslı vakaydı; ' OR 1=1 -- da aynı kapıdan girer.
// kırılır
var rows = await db.Posts
.FromSqlRaw($"SELECT id, title FROM posts WHERE title ILIKE '%{q}%'")
.ToListAsync(ct);
// durur
var rows = await db.Posts
.FromSqlInterpolated($"SELECT id, title FROM posts WHERE title ILIKE {'%' + q + '%'}")
.ToListAsync(ct);
// Dapper
var same = await connection.QueryAsync(
"SELECT id, title FROM posts WHERE title ILIKE @q",
new { q = "%" + q + "%" });
Interpolated string EF'de parametre üretir; Raw üretmez. İkisinin adının benzemesi tuzak. Dapper'da $ "... {q}" yine birleştirme. Sıralama kolonunu kullanıcıdan alıp identifier'a yapıştırmak da injection'dır; whitelist olmadan ORDER BY {sort} yok.
Elif'in SELECT * yazısı performans. Bu yazı aynı ham SQL'in diğer yüzü. Parametre yoksa ORM seni kurtarmaz. Kurtaran şey, kullanıcı metninin query metnine hiç girmemesi.
Yorumlar
Yorumlar (0)
Yorumlar üyelere açık. Üye ol · Giriş yap