0

我已经安装了刹车手并获得了安全漏洞。

这是我的警告

未转义的模型属性在第 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
Brakeman - 3.1.2
Ruby - 2.3.1

4

3 回答 3

2

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

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

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

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

(请注意,如果您没有在电子邮件中转义用户输入,则可能会出现跨站点脚本)。

如果您打算输出纯文本,请使用

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

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

于 2018-01-06T04:13:49.857 回答
1

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

Premailer::Rails::Hook.perform(SendGridMailer.weekly_email([current_user], email)).html_part.body.raw_source
于 2018-09-05T06:44:24.893 回答
0

在视图中,您可以添加h()转义值并删除刹车警告

于 2021-10-30T08:33:19.157 回答