Entity Framework può essere violato?
È possibile eseguire un'iniezione SQL su un'applicazione che utilizza EF?
In tal caso, qualcuno può fornire un esempio completo di come ciò potrebbe essere fatto? Non ho trovato nessuno specifico per EF in C #.
Ascolta questo:
È abbastanza facilmente possibile se lo sviluppatore utilizza EF come wrapper su ADO.NET e utilizza FromSQL. Naturalmente, questo non è l'uso previsto o normale di EF, ma l'ho visto - Camilo Terevinto
Inoltre, anche se non è davvero "sql injection", poiché uno degli obiettivi di tale è modificare leggermente i dati modificando il file sql raw per produrre risultati non desiderati, è necessario tenere presente che ASP.NET - Overposting / Assignment Model Binding Sicurezza
Esempio preso direttamente dal link:
Modello / classe:
public class Person
{
public int ID { get; set; }
public string First { get; set; }
public string Last { get; set; }
public bool IsAdmin { get; set; }
}
Da qualche parte nel tuo Controller
:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(person);
}
Se un EvilUser teorico ha scoperto che Person aveva una proprietà "IsAdmin", potevano "overpost" e aggiungere un campo al POST HTTP e impostare
IsAdmin=true
. Non c'è nulla nel codice qui per impedirlo .
Quindi "l'utente malvagio" non ha nemmeno bisogno di calcolare l' sql injection
per ottenere risultati non voluti. Leggi l'articolo sui modi per prevenirlo (ad esempio BindAttribute
, Visualizza modelli).
Hth.
Dipende dall'uso di esso. Se si utilizza LINQ si, è sicuro contro SQL INJECTION perché passa tutti i dati al database tramite i parametri SQL. Le query LINQ non sono composte utilizzando la manipolazione o la concatenazione di stringhe, ecco perché non sono suscettibili agli attacchi di SQL injection tradizionali.