我有一个显示我的文章的内容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
记录被发现的唯一办法,右?用户还可以如何操纵它?
谢谢!
编辑:我一定要agains的情况下保护时没有找到的文章,将引发一个错误,但我想这是更坏的设计,而不是一个安全漏洞
谢谢!出于好奇,为什么数据库的值本身不受信任?我希望像'params'这样直接来自用户和表单的输入是不可信的,但是大概这些输入数据的数据经过了验证,现在只是被检索出来,对吧? – user2490003
@ user2490003:原因是因为数据库可能存储原始用户输入。 Stack Overflow就是一个很好的例子 - 数据库中会有'
好找到了答案后,一些挖掘。
它显然与
html_safe
和raw
(这只是html_safe
的别名)有关。这个问题是特定于Brakeman和概述here该线程表示问题已得到承认和解决,但它仍然不适用于我使用最新版本。
我解决了它如下
控制器:
查看:
本质上讲,我们正在纪念文章内容
html_safe
(使用别名raw()
),所以它不会导致问题e视图。梅西耶比我想的,但它的工作原理
来源
2016-02-17 20:19:27 user2490003
如果你在你的模型存储的HTML和你on Rails的4.2 ++,你可以考虑使用
sanitize
助手(docs)。例如,可以允许特定的标签(例如链接):
的docs有很多很好的例子。
这里的another write-up如果你想了解更多的信息。
来源
2016-11-15 16:56:19 blimmer