Brakeman提出的Rails中的安全问题

时间:2015-05-17 03:46:53

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

在我的项目中,在使用Brakeman gem时,会出现以下安全问题:

1)在以下声明中,引发了Unescaped model attribute错误

CashTransaction.find(session[:transaction_id]).customer.address_1

我知道Rails使用基于cookie的会话存储。但是,Rails 4使用cookie是相对安全的,因为您需要使用Rails secret token来妥协它。

那么,这是假阳性吗?如果没有,我该如何删除此漏洞?

2)其次,我有一个场景,我需要检查具有典型属性的记录是否存在。为此,我有以下代码

  def check_email
    render json: ( is_available('email', params[:user][:email]) )
  end

  def is_email_available
    is_email_taken = is_available('email', params[:user][:email])
    render json: !is_email_taken
  end

  def is_username_available
    is_username_taken = is_available('username', params[:user][:username])
    render json: !is_username_taken
  end

  def is_available(type, value)
    User.where("#{type}=?", value).exists?
  end

Brakeman提出以下警告

Possible SQL injection. User.where("#{(local type)}=?", (local value))

如何删除此漏洞,同时让我的代码干掉?

1 个答案:

答案 0 :(得分:0)

第二部分:

如果User.where(type.to_sym => value) 不是用户输入,则可以执行

User.where("%s =  %s" % [type, "'#{value}'"])

如果它是您应该做的用户输入。

<!DOCTYPE html>
<html>
<head>
    <title>CM Sound | Home</title>
    <meta charset="UTF-8">
    <meta name="description" content="CM Sound's studio webpage">
    <meta name="author" content="Ryan Buck | May 2015"> 
    <link rel="stylesheet" type="text/css" href="style.css">
</head>

<body>
    <div class="wrapper">
        <div class="header">
            <h1>CM Sound</h1><br/>
            <p>Create with us</p>
        </div>
        <nav>
            <ul>
                <li><a href="#">Home</a></li>
                <li><a href="#">Audio</a></li>
                <li><a href="#">Pricing</a></li>
                <li><a href="#">Contact</a></li>
            </ul>
        </nav>  
        <div class="jumbotron">
            <div class="jumbotext">
            </div>
        </div>
        <div class="footer">

        </div>
    </div>
</body>


</html>