提问人:Tezyn 提问时间:7/8/2021 最后编辑:Tezyn 更新时间:7/8/2021 访问量:484
在 rails 中,推荐的方法来清理用户输入以包含订单
In rails, what is the recommended way to sanitize user input for order inclusion
问:
我了解where方法的哈希和参数化方法,但是我在尝试将输入运行到order()中时遇到了问题。
具体来说,我正在尝试使用 .因为这包括一个带有用作原始 sql 的参数的方法,所以我收到以下警告。.order(["levenshtein(lower(name), ?)",[@form.name.downcase]])
Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s):
"levenshtein(lower(name), ?)". Non-attribute arguments will be disallowed in Rails 6.1.
This method should not be called with user-provided values, such as request parameters or model attributes.
Known-safe values can be passed by wrapping them in Arel.sql().
为了解决这个问题,我尝试实现sanitize_sql_for_order并将我的顺序更改为 .它似乎正在正确逃脱,但我不断收到与上述相同的警告。.order(MyClass.sanitize_sql_for_order(["levenshtein(lower(name), ?)",[@form.name.downcase]]))
ORDER BY levenshtein(lower(name), 'test ''2')
我知道我可以包装我的原始 sql,但即使这样也特别指出它不应该与用户输入一起使用。请注意,sanitize_sql_for_order 方法在其处理过程中调用 Arel.sql。Arel.sql()
rails 推荐使用用户输入进行 order 语句的方式是什么,以便它正确地转义它以防止 SQL 注入。
答: 暂无答案
评论
Arel.sql(...)
MyClass.sanitize_sql_for_order(...)
order