23

我正在使用游戏!框架与 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()
        }
    }
}

我会尝试通过hack的方式找出来,但是很容易出错,所以我认为问更合适,我可以借鉴群众的智慧。

4

1 回答 1

21

根据其源代码,Anorm 只构建java.sql.PreparedStatements,它可以防止这种 SQL 注入。(有关一般说明,请参阅PreparedStatement 维基百科页面)

于 2012-03-25T14:51:01.167 回答