为什么rails截断无效的参数在哪里生成SQL?



为什么rails在SQL中截断公司id ?

0> Company.where(id: '123bad').to_sql
=> "SELECT "companies".* FROM "companies" WHERE "companies"."id" = 123"

id为bigint类型。

老实说,这对我来说似乎是一个潜在的安全问题。但我认为这样做是有原因的。这是怎么回事?

问题是"为什么?"one_answers"这是怎么回事?">

原因是活动记录接受数字的字符串表示(在本例中为整数),并对该输入执行rubyto_i方法。

rubyto_i方法正在进行截断。

没有安全问题,因为它不可能发送除整数以外的任何东西作为rubyto_i方法的输出。

有一个潜在的数据完整性问题,如果它在错误的输入上成功,而它可能无法保护数据。对于查询来说,这不是一个大问题,但是像这样的更新可能是一个问题:

Company.where(id: params[:id]).update_all( ... )

这可能在提供垃圾时有效,此时最好失败。

然而,像这样的问题不是数据库服务的责任来保护你。编写调用代码是开发人员的责任。

相关内容

  • 没有找到相关文章

最新更新