如果我们有一个Active Record数据库说Users
User.find(id
)按预期工作:
但User.find('id~
')
也是User.find('id~gibberish
')
这是ActiveRecord的漏洞还是漏洞?
我如何妥善处理此类请求?
答案 0 :(得分:4)
这应该有助于澄清一些问题,它不是ActiveRecord
,它是您所见过的Ruby to_i
方法。
2.2.1 :001 > '11'.to_i
=> 11
2.2.1 :002 > '11~'.to_i
=> 11
2.2.1 :003 > '11~gibberish'.to_i
=> 11
这不是漏洞也不是漏洞。如果你担心这样的输入,我会问一个你认为可能会对你造成伤害的例子。
此外,如果您想要超级防守,请使用Integer(
2.2.1 :004 > Integer('11~gibberish')
ArgumentError: invalid value for Integer(): "11~gibberish"
2.2.1 :005 > Integer('11')
=> 11