2012-03-25 20 views
20

Tôi đang sử dụng Play! cùng với Anorm để truy cập cơ sở dữ liệu. Tôi thường thấy các ví dụ như sau đây, nơi các thành viên đối tượng được tiêm trực tiếp vào câu lệnh SQL.Liệu Scala Anorm String Replacement Sanitize Inputs?

Câu hỏi của tôi là, các đầu vào này có được vệ sinh không? Hầu hết các ví dụ trông giống như sau:

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() 
     } 
    } 
} 

tôi sẽ cố gắng tìm hiểu bằng cách hack, nhưng nó rất dễ dàng để thực hiện một sai lầm vì vậy tôi nghĩ hỏi là thích hợp hơn, và tôi có thể vẽ trên sự khôn ngoan của đám đông .

Trả lời

19

Theo its source code, Anorm chỉ xây dựng java.sql.PreparedStatements, ngăn chặn việc tiêm SQL như vậy. (xem trang PreparedStatement wikipedia để được giải thích chung)

+0

Bạn có thể vui lòng cập nhật liên kết "mã nguồn của nó" thành https://github.com/playframework/anorm/blob/1384c85434254da8cbd73ac5ba93bf258c04bf12/core/src/main/scala/anorm /SimpleSql.scala#L8-L19? –

Các vấn đề liên quan