ユーザーが正規表現に基づいてデータを照合できるようにする関数を書きたいのですが、ユーザー文字列のサニテーションが心配です。SQL クエリではバインド変数を使用して SQL インジェクション攻撃を回避できることは知っていますが、正規表現にそのようなメカニズムがあるかどうかはわかりません。Regexp.escapeがあることがわかりましたが、有効な正規表現を許可したいと思います。
サンプル関数は次のとおりです。
def tagged?(text)
tags.each do |tag|
return true if text =~ /#{tag.name}/i
end
return false
end
私は直接照合しているだけなのでtag.name
、誰かが Proc 呼び出しまたは何かを挿入して正規表現から抜け出して大混乱を引き起こす可能性はありますか?
ベストプラクティスに関するアドバイスをいただければ幸いです。