标签: brakeman

如何运行特定版本的ruby gem

我在我的Gemfile之外运行刹车手,所以我没有使用捆绑器.

如果我这样做gem list,我可以看到我有以下制动员

brakeman (3.3.3, 3.3.2, 3.1.4, 3.1.2)
Run Code Online (Sandbox Code Playgroud)

但如果我这样做brakeman --version,我明白了

brakeman 3.1.2
Run Code Online (Sandbox Code Playgroud)

所以我没有使用最新版本.如果我这样做gem update brakeman

gem update brakeman, '3.3.3,
Run Code Online (Sandbox Code Playgroud)

我明白了

Updating installed gems
Nothing to update
Run Code Online (Sandbox Code Playgroud)

那么如何运行brakeman版本3.3.3?

rubygems ruby-on-rails brakeman

11
推荐指数
2
解决办法
7663
查看次数

Rails Brakeman警告:动态渲染路径误报?

我刚开始使用Rails,所以我正在使用Brakeman来了解我的新手代码中的潜在漏洞.它在我的show.js.erb文件中抛出了一个高可信度的"动态渲染路径"警告:

$('#media-fragment').html('<%= escape_javascript(render(params[:partial])) %>');
Run Code Online (Sandbox Code Playgroud)

我实际上预计这是一个问题,所以毫不奇怪.所以我把它改成了以下内容:

  # controller:
  def show
    if legal_partial?
      @allowed_partial = params[:partial]
    else
      raise StandardError, "unexpected partial request: #{params[:partial]}"
    end
  end

  private

  def legal_partial?
    %w(screenshots video updates).include? params[:partial]
  end

  # ...
  # show.js.erb
  $('#media-fragment').html('<%= escape_javascript(render(@allowed_partial)) %>');
Run Code Online (Sandbox Code Playgroud)

虽然我相信代码现在是安全的,但Brakeman仍对此不满意.是否有更惯用的方法来控制基于用户输入的部分渲染?

ruby ruby-on-rails ruby-on-rails-3 brakeman

9
推荐指数
1
解决办法
2200
查看次数

Ruby on Rails 3.2.13 - Brakeman - 会话秘密不应包含在版本控制中

我已经安装了最新版本的Brakeman gem来帮助我使用Rails应用程序安全性.

我在两台服务器上有几个Rails应用程序,一个用于开发,另一个用于生产.当我在我的应用程序上运行Brakeman报告时,大多数都标记了config/initializers/secret_token.rb,其中存在以下高安全漏洞.

Session secret should not be included in version control near line 7
Run Code Online (Sandbox Code Playgroud)

这是我几个月前运行旧版Brakeman以来我第一次看到这个错误.

根据我迄今为止所研究的内容,当执行rails new appname时,Rails会自动生成秘密令牌.直到现在我才意识到这一点.显然Rails不保护这个文件,如果我决定将我的任何应用程序移动到Github,那么Github访问该应用程序的任何人都可以获得这些信息.这时我没有上传到GitHub,但我想知道如何从config/initializers/secret_token.rb移动secure_token以关闭我的应用程序中的安全漏洞.

我读过的一篇博文建议我将秘密令牌注入ENV变量.将语句从config/initializers/secret_token.rb移动到config/environment.rb会解决问题吗?如果是这样,我将把这个任务添加到我在Rails开发中的任务列表中.

任何帮助,将不胜感激.

security ruby-on-rails brakeman

9
推荐指数
1
解决办法
3111
查看次数

如何在需要重定向到外部域时防止Brakeman'不受保护的重定向'警告?

Rails应用程序中的模型有一个url列,用户可以在其中输入外部站点的地址.

网址显示在页面上.点击后,除了路由到该网址外,我还需要在应用中执行一些操作.所以我定义了一个控制器动作如下

#objects_controller.rb

def click
  @object = Object.find params[:id]
  # do some stuff
  respond_to do |format|
    format.html { redirect_to @object.url }
  end
end
Run Code Online (Sandbox Code Playgroud)

并在视图中

<%= 'click me', click_object_path @object %>
Run Code Online (Sandbox Code Playgroud)

Brakeman(正如预期的那样)发出警告

High - Redirect - Possible unprotected redirect
Run Code Online (Sandbox Code Playgroud)

通常,解决方案是添加only_path: true到重定向并仅允许当前应用程序中的重定向.但在这种情况下,所需的行为是导航到外部站点.

我的问题

  1. 我是否应该采取任何措施来确保无法从Object.url列输入和激活恶意代码(换句话说,我的点击控制器操作是归档所需的应用内操作和导航的最佳方式)?
  2. 如果这是正确的方法,有没有办法让Brakeman安静下来,以便不再报告这个特殊问题?

redirect ruby-on-rails brakeman

7
推荐指数
1
解决办法
1504
查看次数

如何保护link_to @variable跨站点脚本漏洞

我刚刚开始使用brakeman gem来探索我的rails应用程序的安全漏洞.

除了几个跨站点脚本警告之外,我设法让一切都变得整洁.

这些都有以下共同点:

  • 它们都是link_to标签
  • 它们在类,alt或title属性中都有实例变量
  • 实例变量都表示包含关联模型的活动记录查询
  • 实例变量都是"可评论的".这描述了用户生成的注释的多态关联,类似于此Railscast的修订版本.

例如

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %>
Run Code Online (Sandbox Code Playgroud)

哪里

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id])
Run Code Online (Sandbox Code Playgroud)

这是我需要关注/采取行动吗?我认为Rails 3.2默认会逃脱这些.

我欢迎建议,以帮助我更好地理解这个问题,并确定我应采取的步骤,如果有的话.

ruby-on-rails brakeman

5
推荐指数
1
解决办法
1879
查看次数

rails brakeman命令sql注入

在从参数构造订单方法时,如何避免Rails中的制动器警告?

def index
  @methods = [:name, :manager, :deadline]
  assignments = Assignment.order(sort_column(@methods) + " " + sort_direction).received(current_user).root
end

def sort_column(column_names)
  column_names.each do |column|
    return column if column == params[:sort]
  end
  return 'updated_at'
end

def sort_direction
  params[:direction] == 'asc' ? 'asc' : 'desc'
end
Run Code Online (Sandbox Code Playgroud)

我正在努力避免将用户生成的代码直接放入查询中,但是制动器仍会警告(中等信度)这是一个SQL注入漏洞.

这是误报吗?如果没有,我该如何纠正漏洞?

如果是这样,有没有一种简单的方法可以避免误报?

ruby-on-rails ruby-on-rails-3 brakeman

5
推荐指数
1
解决办法
2089
查看次数

Rails Brakeman警告SQL注入

我的模型中有一个范围:

scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name

    joins("INNER JOIN #{task_table}
          ON  #{task_table}.user_id = #{user.id}
          AND (#{task_table}.type_id = #{table_name}.type_id)
          AND (#{task_table}.manager_id = #{table_name}.manager_id)
        ")
}
Run Code Online (Sandbox Code Playgroud)

因此,在运行刹车员报告后,我得到以下警告:

assigned_to_user | SQL Injection | Possible
Run Code Online (Sandbox Code Playgroud)

所以我尝试了以下方法:

scope :assigned_to_user, ->(user) {
    task_table = UserTask.table_name

        joins(ActiveRecord::Base::sanitize("INNER JOIN #{task_table}
              ON  #{task_table}.user_id = #{user.id}
              AND (#{task_table}.type_id = #{table_name}.type_id)
              AND (#{task_table}.manager_id = #{table_name}.manager_id)
            "))
    }
Run Code Online (Sandbox Code Playgroud)

这对我不起作用,因为它'在sql的前面和后面添加了(撇号)。因此,当我将其用作返回一些结果的查询的一部分并且应用此范围时,它将生成错误的sql。

我也试过这个:

scope :assigned_to_user, ->(user) {
    task_table = UserTask.table_name

        joins("INNER JOIN #{task_table}
              ON  #{task_table}.user_id = ?
              AND (#{task_table}.type_id = #{table_name}.type_id)
              AND …
Run Code Online (Sandbox Code Playgroud)

ruby sql sql-injection ruby-on-rails brakeman

5
推荐指数
1
解决办法
1633
查看次数

Brakeman Error - 未转义的模型属性

我得到了很多错误,如下所示

Unescaped model attribute near line 20: show_errors(Objective.new(objective_params), :name)
Run Code Online (Sandbox Code Playgroud)

扩展视图

这是我的代码

module ApplicationHelper
  # Error Helper for Form
  def show_errors(object, field_name)
    if object.errors.any? && object.errors.messages[field_name][0].present?
      "<label class='text-error'>" + object.errors.messages[field_name][0] + "</label>"
    else
      return ""
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails brakeman ruby-on-rails-4

5
推荐指数
1
解决办法
1939
查看次数

未受保护的重定向未被only_path修复

我有一个Rails 4应用程序,当我运行Brakeman时,它(正确地)在我的创建操作中标识了一个不受保护的重定向.但是,添加only_path:true(如在Brakeman Railscast中)并不能解决警告:

  def create
    refer_url = params[:referrer]
    @portfolio = current_user.portfolios.build(portfolio_params)
    if @portfolio.save
      redirect_to refer_url, notice: "Portfolio was successfully created.", only_path: true
    else
      render :new
    end
  end
Run Code Online (Sandbox Code Playgroud)

结果是:

+SECURITY WARNINGS+

+------------+-----------------------+---------+--------------+----------------------------------------------------------------------------------------------------------------------->>
| Confidence | Class                 | Method  | Warning Type | Message                                                                                                               >>
+------------+-----------------------+---------+--------------+----------------------------------------------------------------------------------------------------------------------->>
| High       | PortfoliosController  | create  | Redirect     | Possible unprotected redirect near line 14: redirect_to(+params[:referrer]+, :notice => "Portfolio was successfully cr>>
+------------+-----------------------+---------+--------------+----------------------------------------------------------------------------------------------------------------------->>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?Brakeman还在识别什么风险?

brakeman ruby-on-rails-4

4
推荐指数
1
解决办法
1562
查看次数

刹车员警告动态渲染路径

我有代码。 users_controller.rb

  def show
    @user = User.find_by id: params[:id]
    @microposts = @user.microposts.order_micropost.paginate(page: params[:page], per_page: 5)
  end
Run Code Online (Sandbox Code Playgroud)

并查看/user/show.html.erb

<% provide :title, @user.name %>
<div class="row">
  <aside class="col-md-4">
    <section class="user-info">
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
  <div class="col-md-8">
    <% if @user.microposts.any? %>
      <h3><%= t ".count_microposts", count:  @user.microposts.count %></h3>
      <ol class="microposts">
        <%= render @microposts %>
      </ol>
      <%= will_paginate @microposts %>
    <% end %>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在 micropost/_micropost.html.erb

<li id="micropost-<%= micropost.id %>">
  <span class="user">
    <%= link_to micropost.user.name, micropost.user %> …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails brakeman

4
推荐指数
1
解决办法
3320
查看次数