Опускать HTML, но хранить теги <br>в рельсах - PullRequest
0 голосов
/ 19 июля 2010

Мне нужно отображать комментарии пользователей, пропуская HTML для предотвращения атак (когда элементы с пользовательским стилем можно публиковать в виде комментариев) Единственное, что я хотел бы сохранить, отображая - это
tag

Я отображаю комментарий следующим образом:

<p class="content"><%=h comment.content.gsub(/\n/,"<br/>") %></p>

Комментарий предполагается сохранить в базе данных без разметки

Окончание строки преобразуется в теги "br"

Но, конечно, они исчезли из-за режима вывода = h .

Есть ли способ убить все html, кроме тегов "br"?

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

Вы можете использовать sanitize , который хранит только указанные теги HTML:

<%= sanitize comment.content.gsub(/\n/,"<br/>"), :tags => ['br'] %>

или (в вашем случае желательно) изменить порядок обоих и сделать html_escape себя:

<%= html_escape(comment.content).gsub(/\n/,"<br/>") %>
0 голосов
/ 19 июля 2010

Я бы порекомендовал использовать плагин white_list. Это безопасно для XSS-атак, и вы сможете контролировать список разрешенных тегов

...