未转义的模型属性

Unescaped model attribute

我安装了 brakeman 并发现了安全漏洞。

这是我的警告

在第 24 行附近内联呈现的未转义模型属性:render(inline => SendGridMailer.weekly_email([current_user], WeeklyNewsletterFactory.new.email(:preview => true) ).html_part.body.raw_source, {})

行:24

render inline: SendGridMailer.weekly_email([current_user], email).html_part.body.raw_source

我已经按照 brakeman 的建议尝试了这个解决方案,但是在这样做之后我开始收到错误 Could not parse

render(inline: SendGridMailer.weekly_email([current_user], email).html_part.body.raw_source,{}) 

Rails - 4.2.4
刹车手 - 3.1.2
Ruby - 2.3.1

当您调用 render inline: ... 时,Rails 会将传入的文本视为 ERB 模板。这意味着如果您提供的字符串中有任何 <%...%> 标记(或攻击者插入它们的可能性),它们将作为 Ruby 代码执行。

如果那是你想要的,那就没问题。 Ignore the warning. 但请记住,这很危险! 如果攻击者可以操纵文本插入 ERB 标签,他们就可以在您的服务器上执行任意代码。

如果你只想输出一些HTML,使用

render html: SendGridMailer.weekly_email([current_user], email).html_part.body.raw_source.html_safe

(请注意,如果您不转义电子邮件中的用户输入,则有可能 cross-site scripting)。

如果你想输出明文,使用

render plain: SendGridMailer.weekly_email([current_user], email).html_part.body.raw_source

此外,Brakeman 不会输出建议的代码修复,因此您可能误解了报告。

您可以使用 Premailer::Rails::Hook.perform

Premailer::Rails::Hook.perform(SendGridMailer.weekly_email([current_user], email)).html_part.body.raw_source

在一个视图中,您可以添加 h() 以转义该值并删除制动员警告