为什么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( ... )
这可能在提供垃圾时有效,此时最好失败。
然而,像这样的问题不是数据库服务的责任来保护你。编写调用代码是开发人员的责任。