未转义的模型属性
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()
以转义该值并删除制动员警告
我安装了 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()
以转义该值并删除制动员警告