2010-10-29 3 views
0

J'essaie de créer un CMS dans Rails à partir de zéro, et pour montrer les pages générées par l'utilisateur, j'ai du mal à décider exactement comment le faire.Comment faire du contenu utilisateur à partir de CMS dans Rails

La façon dont je l'ai en ce moment, j'ai un contrôleur nommé «contenu» avec une seule action appelée «show». Dans les routes.rb j'ai une règle qui passe n'importe quel nom après le nom du site Web au contrôleur de contenu, montrez l'action avec le nom de paramètre.

Par exemple, www.mysite.com/about_us ferait passer à

:controller => 'content', :action => 'show', :page => 'about_us' 

A l'intérieur du contrôleur de contenu, je fais une découverte sur le modèle des pages pour localiser la page nommée:

@markup = Page.find_by_name(params[:page]) 

Et puis dans la vue show.html.erb j'utilise l'assistant brut pour afficher le contenu:

<%= raw @markup.text %> 

Cette méthode vi olate quoi que ce soit sur la façon dont je devrais faire des choses dans Rails? Ou est-ce une solution OK?

+1

'<% = brut @ markup.text%>' Cela permet à tout le monde qui a accès à votre CMS pour entrer du code javascript malveillant dans le contenu. Juste un indice. –

+0

Je me suis demandé à ce sujet quand je l'ai mis là-dedans. Mon idée était de permettre aux utilisateurs de formater leurs pages en utilisant TinyMCE, qui produit le balisage. L'utilisation de 'raw' était la seule façon que j'ai trouvé pour obtenir des rails pour sortir le balisage sans échapper aux balises. J'ai également trouvé une méthode pour les chaînes de rails appelée html_safe, mais je ne suis pas sûr que cela fasse exactement ce que je veux. – jvergeldedios

+0

ou si j'utilise l'assistant d'assainissement à la place? – jvergeldedios

Répondre

0

J'ai fini par utiliser l'assistant d'assainissement, par défaut il supprime les balises <script>, ce qui est essentiellement ce dont vous avez besoin pour empêcher XSS, pour autant que je sache. Pour ceux qui ont trouvé cela via une recherche, le seul code qui change de ce que je décrit ci-dessus est que, dans la vue que vous passez à:

<%= sanitize @markup.text %> 
Questions connexes