未转义的模型属性

时间:2018-01-05 08:23:50

标签: ruby-on-rails ruby ruby-on-rails-4 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

我已经按照制动器的建议尝试了这个解决方案但是在这之后我开始收到错误无法解析

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

Rails - 4.2.4
制动器 - 3.1.2
Ruby - 2.3.1

2 个答案:

答案 0 :(得分: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不输出建议的代码修复,因此您可能会错误解释报告。

答案 1 :(得分:1)

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

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