【问题标题】:rails: does the build method protect against sql injectionrails:构建方法是否可以防止 sql 注入
【发布时间】:2010-07-07 07:26:23
【问题描述】:

构建是否可以防止 sql 注入?

例子:

@post = @user.posts.build(params[:post])
@post.save

在 rails 安全文档中没有看到 build。

谢谢!

【问题讨论】:

  • 这并不是真正的重复,因为它没有询问使用build。此外,可能的重复项可能应作为问题而不是答案的 cmets 发布。

标签: sql ruby-on-rails


【解决方案1】:

build 本身不会向数据库写入任何内容,因此不适用 SQL 注入。当您调用save 时,无论对象是通过build 还是通过其他机制(例如将属性传递给new 或使用单独的attribute= 方法)创建的,都将使用相同的代码来保存您的对象到数据库。

来自documentation on build

返回集合的一个新对象 已实例化的类型 属性并链接到该对象 通过连接表,但还没有 尚未保存。

save 方法将使用适合您正在使用的数据库(例如 MySQL)的方法转义属性值中的任何引号等,以便生成的 insertcreate 查询不易受到 SQL 注入的影响.这同样适用于update_attributes 和您传递给find 的任何参数化:conditions。如果您曾经将文字字符串作为查询传递给数据库连接,那么您需要小心并且可能需要进行一些手动转义的时间。

【讨论】:

  • 好的,这是有道理的。但是上面的代码示例会过滤掉 sql 注入吗?那部分还不清楚。谢谢!
  • @bandhunt 我已经更新了答案,以澄清您问题中的代码很好,并且会过滤掉 SQL 注入尝试。
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 2013-08-01
相关资源
最近更新 更多