Je souhaite écrire une fonction permettant aux utilisateurs de faire correspondre des données en fonction d'une expression rationnelle, mais je suis préoccupé par l'assainissement des chaînes utilisateur. Je sais qu'avec les requêtes SQL, vous pouvez utiliser des variables de liaison pour éviter les attaques par injection SQL, mais je ne suis pas sûr qu'il existe un tel mécanisme pour les expressions rationnelles. Je vois qu'il y a Regexp.escape, mais je veux autoriser les expressions rationnelles valides.Assainissement de l'expression utilisateur
Voici est la fonction de l'échantillon:
def tagged?(text)
tags.each do |tag|
return true if text =~ /#{tag.name}/i
end
return false
end
Depuis que je suis qu'aligner directement sur tag.name
est-il une chance que quelqu'un pourrait insérer un appel Proc ou quelque chose pour sortir de l'expression rationnelle et causer des ravages?
Tout conseil sur les meilleures pratiques serait apprécié.
Je testais en essayant d'insérer un proc et j'ai eu les mêmes erreurs. J'ai l'impression qu'il est échappé lorsqu'il est affecté à un objet activerecord: # Et je reçois les mêmes erreurs que vous avez eu en essayant de l'utiliser dans le cadre de une regex. Je ne savais pas s'il y avait quelque chose qui me manquait. –