FlawOpen

flawopen.com/SQL-Injection in C#/NHibernate

Schützt NHibernate vor SQL-Injection?

Referenzleitfaden
Kurzantwort

Ein gebundener Parameter ähnelt einer versiegelten Wertkarte: Die Datenbank behandelt den Inhalt als Daten, nicht als Anweisung. HQL-Parameter trennen Werte. Nicht vertrauenswürdigen Text in HQL oder SQL zu interpolieren, macht ihn wieder zu Abfragesprache.

UNSICHER — Eingabe in HQL interpolieren
var hql =
  $"from User u where u.Id = {userId}";
var user = session.CreateQuery(hql)
  .UniqueResult<User>();
ABGESICHERT — Wert an HQL-Parameter binden
var user = session.CreateQuery(
    "from User u where u.Id = :id")
  .SetParameter("id", userId)
  .UniqueResult<User>();

Werte binden; Abfragestruktur begrenzen

SetParameter() übermittelt den Wert getrennt vom HQL-Text. Verwende benannte oder positionale Parameter für jeden nicht vertrauenswürdigen Wert. Auch native SQL-Abfragen unterstützen benannte und positionale Parameter; verwende die passende Bindungsmethode der ISQLQuery-API (zum Beispiel SetString() für Zeichenfolgen). Parameter stehen nicht für Entitäts- oder Eigenschaftsnamen, Sortierrichtungen oder Fragmente: Das ist Abfragestruktur. Ordne auswählbare Eigenschaften einer festen, anwendungseigenen Menge von HQL-Fragmenten zu. Parametrisierung verhindert, dass Werte als Syntax gelten, entscheidet aber nicht über Zugriffsrechte auf Datensätze.

FAQ

Berechtigt die HQL-Parametrisierung auch den Zugriff auf einen Datensatz?

Nein. Parameterbindung schützt die Syntax vor Datenwerten; die Autorisierung muss Abfragen auf Datensätze begrenzen, die der aktuelle Nutzer sehen darf, etwa durch Filterung nach Konto oder Tenant.

Quellen

Siehe auch SQL-Injection (CWE-89): Funktionsweise und Schutz in jeder Sprache — flawopen.com MongoDB NoSQL Injection: sichere Abfragefilter Können auch numerische IDs SQL Injection verursachen? Was ist eine parametrisierte Abfrage? Ist Prisma $queryRaw vor SQL-Injection sicher? Ist String-Interpolation in Rails where() sicher? Ist Sequelize query() vor SQL-Injection sicher?