2017-08-04 2 views
2

Lorsque vous envoyez des e-mails sur des rails, vous utilisez souvent <%= variable %> pour injecter des données dans la vue.Rails échapper à des éléments pouvant être automatiquement liés par un client de messagerie (Gmail, Outlook)

Le problème est, si le variable contient quelque chose comme http://google.com, les clients de messagerie se fera un plaisir de créer automatiquement un lien pour cette chaîne, même si vous ne l'avez pas l'enrouler autour d'une balise <a>. Cela peut entraîner divers problèmes de sécurité.

Maintenant, je ne veux pas essayer de trouver une solution pour chaque cas. Alors, y a-t-il une astuce que je peux utiliser sur les vues ActionMailer pour m'assurer qu'aucune url potentielle ne sera corrigée automatiquement par les clients de messagerie?

Répondre

2

Je ne pense pas qu'il existe un moyen facile d'empêcher cela, car cela se passe du côté client.

Une manière de tromper les clients de messagerie est d'ajouter <span> s au milieu des URL, ce qui empêche les liens d'être ajoutés sans modifier le style de texte.

Vous pouvez le faire dans des endroits spécifiques avec une aide comme:

module MailHelper 
    def escape_links(text) 
    h(text).gsub(/[\.:]/, '<span>\0</span>').html_safe 
    end 
end 

Et utiliser ensuite dans la vue des modèles comme <%= escape_links variable %>. Je suis d'accord qu'il serait un peu ennuyeux d'ajouter cela partout, et il semble que vous voulez une solution plus générique. Dans ce cas, quelque chose qui pourrait fonctionner (je ne l'ai pas encore essayé) consiste à appliquer une approche similaire en utilisant email interceptors pour changer le corps du message. Vous auriez besoin d'une stratégie de remplacement plus intelligente, cependant, pour éviter d'ajouter <span> à l'intérieur <a> s href s.

+1

C'est le plus proche de la meilleure réponse, merci beaucoup! – rubenfonseca

0

Vous pouvez ajouter cette css à votre courriel.

*{ 
    pointer-events: none; 
} 

Ceci empêchera tout clic de souris sur le courrier électronique comme en html.

+0

Merci, mais cela va perturber les liens réels normaux que j'ai sur l'email. – rubenfonseca