[英]Why is my view being flagged as an XSS vulnerability?
我有一个show
我的文章内容的show
路线
控制器:
def show
@article = Article.find(params[:id])
end
视图:
...
<li class="content"><%= @article.content.html_safe %></li>
...
运行Brakeman时,它会将上述内容标记为潜在的跨站点脚本(XSS)漏洞
Unescaped model attribute near line 34: Article.find(params[:article_id]).content
我想弄清楚XSS究竟是什么以及是什么让它变得脆弱? 如果有人将某些恶意文本或输入注入路径中的params[:id]
字段(例如/articles/BAD_INPUT
),那么/articles/BAD_INPUT
Article.find()
将找不到该文章并引发错误
视图呈现的唯一方法是找到有效的Article
记录,对吧? 用户还能如何操纵它?
谢谢!
编辑:当找不到文章并且出现错误时,我肯定会再次保护这个案例,但我认为这更糟糕的是设计而不是安全漏洞
一些挖掘后找到了答案。
它显然与html_safe
和raw
(这只是html_safe
的别名)有关。 这个问题是Brakeman特有的,并在此概述
那个帖子说这个问题得到了承认并得到了解决,但是对于我来说,它仍然无法使用最新版本。
我解决了它如下
控制器:
def show
@article = Article.find(params[:id])
@article_content = view_context.raw(@article.content)
end
视图:
...
<li class="content"><%= @article_content %></li>
...
基本上我们预先将文章内容标记为html_safe
(使用别名raw()
),因此它不会在视图中引起问题。
梅西耶比我想要的,但它的确有效
Brakeman警告,因为代码从数据库获取信息并在视图中输出它而不转义它。 默认情况下,Brakeman将数据库中的值视为具有潜在危险。 在这种情况下,您可能知道文章内容是HTML,并且可以安全地输出而不会转义它。 如果您不希望使用数据库中的值来警告XSS,可以使用--ignore-model-output
选项。
(您在答案中链接的问题并不是真正相关的。预计html_safe
会警告raw
/ html_safe
使用具有潜在的危险值。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.