【问题标题】:Unescaped model attribute未转义的模型属性
【发布时间】:2018-01-05 08:23:49
【问题描述】:

我安装了刹车手并发现了安全漏洞。

这是我的警告

未转义的模型属性在第 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,{}) 

导轨 - 4.2.4
刹车手 - 3.1.2
红宝石 - 2.3.1

【问题讨论】:

  • 为什么我会收到此警告 Unescaped 模型属性内联渲染。以及如何解决。 Brakeman 说这是跨站脚本漏洞
  • 第 24 行是什么?
  • 我已经为第 24 行的内联渲染插入了代码:SendGridMailer.weekly_email([current_user], email).html_part.body.raw_source
  • 这不是一个类似的问题。请再过一遍

标签: ruby-on-rails ruby ruby-on-rails-4 brakeman


【解决方案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 不会输出建议的代码修复,因此您可能会误解报告。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多