2017-07-04 2 views
2

In PetaPoco's home page gibt es eine Erwähnung, dass PetaPocos SQL-Builder (Sql-Objekt) vor SQL-Injection schützt. Aber schützt die Query (String-Abfrage, Parameter) -Methode vor SQL-Injection?Schützt PetaPocos Abfrage (String Query, Parameter) vor SQL-Injection?

SQL Builder ist sicher:

var id = 123; 
var a = db.Query<article>(PetaPoco.Sql.Builder 
    .Append("SELECT * FROM articles") 
    .Append("WHERE [email protected]", id) 
); 

Aber ist es mit String-Abfrage sicher, wo Parameter wie folgt übergeben werden?

var id = 123; 
var a = db.Query<article>("SELECT * FROM articles WHERE [email protected]", id); 
+3

Ja, wenn Sie versuchen, den Quellcode von PetaPoco auf github zu betrachten. Es ist schließlich SqlParameter verwenden. https://github.com/CollaboratingPlatypus/PetaPoco/blob/development/PetaPoco/Database.cs#L952 – ngeksyo

Antwort

3

Ja, es schützt vor SQL-Injektion.

Sie können dies überprüfen, wenn Sie nicht sicher sind, indem Sie eine SQL-Ablaufverfolgung für die gerade ausgeführte SQL ausführen. Oder stellen Sie einige Eingaben mit einem einzelnen und einem doppelten Anführungszeichen darin (gegen eine nvarchar-Spalte) bereit und sehen Sie, ob eine Laufzeitausnahme auftritt (was passieren würde, wenn SQL Injection ein Problem wäre).

Siehe auch https://github.com/CollaboratingPlatypus/PetaPoco/issues/326#issuecomment-238538854:

dies das richtige Verhalten ist. Die SQL und Parameter werden an der DB-Befehl übergeben, um injection-basierte Angriffe zu verhindern. Der angeschlossene DB verbindet die SQL und die Parameter auf sichere Weise

+0

PetaPoco Betreuer hier. @mjwills ist korrekt – Plebsori