У меня есть show
маршрут, который отображает содержимое моей статьиПочему мой взгляд помечен как уязвимость XSS?
Контроллер:
def show
@article = Article.find(params[:id])
end
Вид:
...
<li class="content"><%= @article.content.html_safe %></li>
...
При запуске кондуктор, он помечает выше как потенциальная уязвимость межсайтового сценария (XSS)
Unescaped model attribute near line 34: Article.find(params[:article_id]).content
Я пытаюсь выяснить, что такое XSS и что делает это уязвимым? Если кто-то впрыскивают некоторый вредоносный текст или ввод в params[:id]
поле в маршруте (например, /articles/BAD_INPUT
), то Article.find()
не нашел бы статью и вызвать ошибку
Единственный способ вид визуализирует, если действительный Article
запись найдена, право ? Как еще можно манипулировать этим пользователем?
Спасибо!
Edit: я должен определенно защитить Agains случае, когда какая-либо статья не найдена, и возникают ошибку, но я понял, что больше похоже на плохой дизайне, а не уязвимости
Спасибо! Из любопытства, почему значения из БД неотвратимо ненадежны? Я ожидаю, что входные данные, такие как 'params', будут поступать прямо от пользователей и форм, чтобы быть ненадежными, но, по-видимому, чаще, чем данные, которые попали в БД, были проверены и теперь только что восстановлены, не так ли? – user2490003
@ user2490003: Причина в том, что в базе данных может храниться исходный пользовательский ввод. Отличным примером является Stack Overflow - в базе данных будут теги '
Ok нашел ответ после того, как некоторые копания.
По-видимому, это связано с
html_safe
иraw
(что является просто псевдонимом дляhtml_safe
). Эта проблема относится к Brakeman и изложена hereВ этой статье говорится, что проблема подтверждена и решена, но она по-прежнему не работает для меня с использованием последней версии.
Я решил его следующим образом
Контроллер:
Вид:
По существу мы маркирование содержание статьи в качестве
html_safe
(используя псевдонимraw()
), поэтому он не вызывает проблемы в e.Мессье, чем хотелось бы, но это работает
источник
2016-02-17 20:19:27 user2490003
Если вы храните HTML на вашей модели, и вы на Rails 4.2 ++, вы могли бы рассмотреть вопрос об использовании
sanitize
помощника (docs).Например, вы можете разрешить конкретные теги (например, ссылки):
docs есть много хороших примеров.
Вот another write-up, если вы хотите получить дополнительную информацию.
источник
2016-11-15 16:56:19 blimmer