2012-03-25 9 views
20

Ich benutze das Spiel! Framework zusammen mit Anorm für den Zugriff auf die Datenbank. Ich sehe oft Beispiele wie die folgenden, wo Objekt Mitglieder direkt in die SQL-Anweisung injiziert werden.Scala Anorm String Ersetzung Sanitize Eingänge?

Meine Frage ist, sind diese Eingaben bereinigt? Die meisten Beispiele wie folgt aussehen:

object Person { 
    def save(p:Person) { 
     DB.withConnection ("default") { implicit connection => 
      SQL(""" 
       INSERT INTO person(firstName,lastName) 
       values ({firstName}, {lastName}) 
       """ 
       ).on(
       "firstName" -> p.firstName, 
       "lastName" -> p.lastName 
      ).executeUpdate() 
     } 
    } 
} 

Ich werde versuchen, durch, um herauszufinden, Hacking, aber es ist leicht, einen Fehler zu machen, so war ich dachte, fragen mehr angemessen, und ich kann auf die Weisheit der Masse ziehen .

Antwort

19

Nach its source code baut Anorm nur java.sql.PreparedStatements, die solche SQL-Injektion verhindern. (Siehe PreparedStatement wikipedia Seite für eine allgemeine Erklärung)

+0

Könnten Sie bitte aktualisieren Sie Ihren „sein Quellcode“ Link zu https://github.com/playframework/anorm/blob/1384c85434254da8cbd73ac5ba93bf258c04bf12/core/src/main/scala/anorm /SimpleSql.scala#L8-L19? –