我正在使用Play!框架以及Anorm访问数据库。我经常看到如下例子,其中对象成员直接注入到SQL语句中。
我的问题是,这些投入是否已消毒?大多数示例如下所示:
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()
}
}
}
我会试图通过黑客行为找出答案,但很容易犯错,所以我觉得要求更合适,我可以借鉴人群的智慧。
答案 0 :(得分:21)
根据its source code,Anorm仅构建java.sql.PreparedStatements
,这会阻止此类SQL注入。 (有关一般说明,请参阅PreparedStatement wikipedia页面)