如何修复brakman生成的rails中的跨站点脚本安全警告



我在应用程序中使用brakman生成扫描报告。它生成了许多具有高度可信度的跨站点脚本安全警告。其中一个是:

Unescaped parameter value rendered inline near line 47: render(text => "Unexpected EventType #{params["EventType"]}", { :status => 406 })
app/controllers/event_controller.rb.

在下面显示的控制器方法中,第1行显示了上述警告。

我在链接中看到了,但无法修复。请帮忙。这是控制器代码:

  def purchase
    render :status => 406, :text => "Unexpected EventType #{params['EventType']}" and return unless params['EventType'] == 'purchased'
    @account = Account.new
    render :status => 406, :text => "Could not find Plan #{params['Plan']}" and return unless @account.plan = @plan = SubscriptionPlan.find_by_name(params['Plan'])
  end

使用render :text => ...时,Rails仍然将输出呈现为HTML(内容类型为text/html)。由于您的代码将用户输入(params['EventType'])直接放在输出中,因此这是一个典型的跨站点脚本漏洞。

你有两个选择。改为使用render :plain(将使用内容类型text/plain而不是HTML进行渲染):

render :status => 406, :plain => "Unexpected EventType #{params['EventType']}"

或退出用户输入:

render :status => 406, :text => "Unexpected EventType #{ERB::Util.html_escape(params['EventType'])}"

相关内容

  • 没有找到相关文章

最新更新