使用正则表达式和转义的 MongoID 查询

MongoID Query with Regex and escaping

我想知道是否有必要在使用 rails/mongoID 的查询调用中转义正则表达式?

这是我当前的查询:

@model.where(nice_id_string: /#{params[:nice_id_string]}/i)

我现在不确定它是否不够安全,因为正则表达式。

我应该使用下面的代码还是 MongoID 自动转义查询调用?

@model.where(nice_id_string: /#{Regexp.escape(params[:nice_id_string])}/i)

当然你应该对输入进行转义。考虑 params[:nice_id_string].*,您当前的查询将是:

@model.where(nice_id_string: /.*/i)

而你的第二个是:

@model.where(nice_id_string: /\.\*/i)

它们的作用截然不同,其中有一个是您可能不想要的。态度非常恶劣的人可能会在您当前的版本中进行一些灾难性的回溯,我不确定 MongoDB/V8 的正则表达式引擎会用它做什么。