dhhxu/projectscope

View on GitHub

Showing 171 of 171 total issues

Possible information leak / session hijack vulnerability
Open

    rack (1.6.4)
Severity: Minor
Found in Gemfile.lock by bundler-audit

Advisory: CVE-2019-16782

Criticality: Medium

URL: https://github.com/rack/rack/security/advisories/GHSA-hrqr-hxpp-chr3

Solution: upgrade to ~> 1.6.12, >= 2.0.8

XSS vulnerability in rails-html-sanitizer
Open

    rails-html-sanitizer (1.0.3)
Severity: Minor
Found in Gemfile.lock by bundler-audit

Advisory: CVE-2018-3741

URL: https://groups.google.com/d/msg/rubyonrails-security/tP7W3kLc5u4/uDy2Br7xBgAJ

Solution: upgrade to >= 1.0.4

Avoid deeply nested control flow statements.
Open

      if session[:sort] == 'pts'
        @projects = Project.includes(:pivotal_tracker).order("pivotal_trackers.score desc")
        session[:sort] = 'dpts'
      else
        @projects = Project.includes(:pivotal_tracker).order("pivotal_trackers.score asc")
Severity: Major
Found in app/controllers/projects_controller.rb - About 45 mins to fix

    Function PivotalTrackerGraphic has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
    Open

    var PivotalTrackerGraphic = function(projectID, pivotalTrackerURL) {
      this.pivotalTrackerURL = pivotalTrackerURL;
      this.getPivotalTrackerData = function() {
        jQuery.ajax({type: 'GET',
                url: this.pivotalTrackerURL,
    Severity: Minor
    Found in app/assets/javascripts/pivotal_tracker_graphic.js - About 35 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Possible SQL injection
    Open

        @pivotal_trackers = PivotalTracker.find_by params[:project_id]

    Injection is #1 on the 2013 OWASP Top Ten web security risks. SQL injection is when a user is able to manipulate a value which is used unsafely inside a SQL query. This can lead to data leaks, data loss, elevation of privilege, and other unpleasant outcomes.

    Brakeman focuses on ActiveRecord methods dealing with building SQL statements.

    A basic (Rails 2.x) example looks like this:

    User.first(:conditions => "username = '#{params[:username]}'")

    Brakeman would produce a warning like this:

    Possible SQL injection near line 30: User.first(:conditions => ("username = '#{params[:username]}'"))

    The safe way to do this query is to use a parameterized query:

    User.first(:conditions => ["username = ?", params[:username]])

    Brakeman also understands the new Rails 3.x way of doing things (and local variables and concatenation):

    username = params[:user][:name].downcase
    password = params[:user][:password]
    
    User.first.where("username = '" + username + "' AND password = '" + password + "'")

    This results in this kind of warning:

    Possible SQL injection near line 37:
    User.first.where((((("username = '" + params[:user][:name].downcase) + "' AND password = '") + params[:user][:password]) + "'"))

    See the Ruby Security Guide for more information and Rails-SQLi.org for many examples of SQL injection in Rails.

    Loofah 2.0.3 is vulnerable (CVE-2018-8048). Upgrade to 2.1.2
    Open

        loofah (2.0.3)
    Severity: Minor
    Found in Gemfile.lock by brakeman

    Rails 4.2.5 is vulnerable to denial of service via mime type caching (CVE-2016-0751). Upgrade to Rails version 4.2.5.1
    Open

        rails (4.2.5)
    Severity: Minor
    Found in Gemfile.lock by brakeman

    Rails 4.2.5 content_tag does not escape double quotes in attribute values (CVE-2016-6316). Upgrade to 4.2.7.1
    Open

        rails (4.2.5)
    Severity: Minor
    Found in Gemfile.lock by brakeman

    rails-html-sanitizer 1.0.3 is vulnerable (CVE-2018-3741). Upgrade to 1.0.4
    Open

        rails-html-sanitizer (1.0.3)
    Severity: Minor
    Found in Gemfile.lock by brakeman

    Possible SQL injection
    Open

        @pull_requests = PullRequest.find_by params[:project_id]

    Injection is #1 on the 2013 OWASP Top Ten web security risks. SQL injection is when a user is able to manipulate a value which is used unsafely inside a SQL query. This can lead to data leaks, data loss, elevation of privilege, and other unpleasant outcomes.

    Brakeman focuses on ActiveRecord methods dealing with building SQL statements.

    A basic (Rails 2.x) example looks like this:

    User.first(:conditions => "username = '#{params[:username]}'")

    Brakeman would produce a warning like this:

    Possible SQL injection near line 30: User.first(:conditions => ("username = '#{params[:username]}'"))

    The safe way to do this query is to use a parameterized query:

    User.first(:conditions => ["username = ?", params[:username]])

    Brakeman also understands the new Rails 3.x way of doing things (and local variables and concatenation):

    username = params[:user][:name].downcase
    password = params[:user][:password]
    
    User.first.where("username = '" + username + "' AND password = '" + password + "'")

    This results in this kind of warning:

    Possible SQL injection near line 37:
    User.first.where((((("username = '" + params[:user][:name].downcase) + "' AND password = '") + params[:user][:password]) + "'"))

    See the Ruby Security Guide for more information and Rails-SQLi.org for many examples of SQL injection in Rails.

    Possible SQL injection
    Open

        @slack_trends = SlackTrend.find_by params[:project_id]

    Injection is #1 on the 2013 OWASP Top Ten web security risks. SQL injection is when a user is able to manipulate a value which is used unsafely inside a SQL query. This can lead to data leaks, data loss, elevation of privilege, and other unpleasant outcomes.

    Brakeman focuses on ActiveRecord methods dealing with building SQL statements.

    A basic (Rails 2.x) example looks like this:

    User.first(:conditions => "username = '#{params[:username]}'")

    Brakeman would produce a warning like this:

    Possible SQL injection near line 30: User.first(:conditions => ("username = '#{params[:username]}'"))

    The safe way to do this query is to use a parameterized query:

    User.first(:conditions => ["username = ?", params[:username]])

    Brakeman also understands the new Rails 3.x way of doing things (and local variables and concatenation):

    username = params[:user][:name].downcase
    password = params[:user][:password]
    
    User.first.where("username = '" + username + "' AND password = '" + password + "'")

    This results in this kind of warning:

    Possible SQL injection near line 37:
    User.first.where((((("username = '" + params[:user][:name].downcase) + "' AND password = '") + params[:user][:password]) + "'"))

    See the Ruby Security Guide for more information and Rails-SQLi.org for many examples of SQL injection in Rails.

    Rails 4.2.5 contains a SQL injection vulnerability (CVE-2016-6317). Upgrade to 4.2.7.1
    Open

        rails (4.2.5)
    Severity: Critical
    Found in Gemfile.lock by brakeman

    Method get_data has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
    Open

      def get_data
        begin
          client = Octokit::Client.new(:access_token => ENV['GITHUB_KEY'])
          client.auto_paginate = true
          
    Severity: Minor
    Found in app/models/pull_request.rb - About 25 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Method url_appropriate has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
    Open

        def url_appropriate
            if self.url and self.url.length > 0
                errors.add :url, "Invalid URL" unless
                    UrlHelper.url_exist? self.url
            elsif self.url == nil
    Severity: Minor
    Found in app/models/code_climate_metric.rb - About 25 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Method parse_response has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
    Open

        def parse_response(url)
            if self.url == ''
                # special case for empty CC URL
                return {:stat => nil, :color => nil}
            end
    Severity: Minor
    Found in app/models/code_climate_metric.rb - About 25 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

          if session[:sort] == 'gpa'
            @projects = Project.includes(:code_climate_metric).order("code_climate_metrics.gpa desc")
            session[:sort] = 'dgpa'
          else
            @projects = Project.includes(:code_climate_metric).order("code_climate_metrics.gpa asc")
    Severity: Minor
    Found in app/controllers/projects_controller.rb and 3 other locations - About 20 mins to fix
    app/controllers/projects_controller.rb on lines 20..25
    app/controllers/projects_controller.rb on lines 28..33
    app/controllers/projects_controller.rb on lines 36..41

    Duplicated Code

    Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

    Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

    When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

    Tuning

    This issue has a mass of 28.

    We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

    The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

    If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

    See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

    Refactorings

    Further Reading

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

          if session[:sort] == 'prs'
            @projects = Project.includes(:pull_request).order("pull_requests.score desc")
            session[:sort] = 'dprs'
          else
            @projects = Project.includes(:pull_request).order("pull_requests.score asc")
    Severity: Minor
    Found in app/controllers/projects_controller.rb and 3 other locations - About 20 mins to fix
    app/controllers/projects_controller.rb on lines 12..17
    app/controllers/projects_controller.rb on lines 20..25
    app/controllers/projects_controller.rb on lines 36..41

    Duplicated Code

    Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

    Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

    When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

    Tuning

    This issue has a mass of 28.

    We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

    The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

    If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

    See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

    Refactorings

    Further Reading

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

          if session[:sort] == 'pts'
            @projects = Project.includes(:pivotal_tracker).order("pivotal_trackers.score desc")
            session[:sort] = 'dpts'
          else
            @projects = Project.includes(:pivotal_tracker).order("pivotal_trackers.score asc")
    Severity: Minor
    Found in app/controllers/projects_controller.rb and 3 other locations - About 20 mins to fix
    app/controllers/projects_controller.rb on lines 12..17
    app/controllers/projects_controller.rb on lines 20..25
    app/controllers/projects_controller.rb on lines 28..33

    Duplicated Code

    Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

    Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

    When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

    Tuning

    This issue has a mass of 28.

    We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

    The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

    If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

    See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

    Refactorings

    Further Reading

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

          if session[:sort] == 'coverage'
            @projects = Project.includes(:code_climate_metric).order("code_climate_metrics.coverage desc")
            session[:sort] = 'dcoverage'
          else
            @projects = Project.includes(:code_climate_metric).order("code_climate_metrics.coverage asc")
    Severity: Minor
    Found in app/controllers/projects_controller.rb and 3 other locations - About 20 mins to fix
    app/controllers/projects_controller.rb on lines 12..17
    app/controllers/projects_controller.rb on lines 28..33
    app/controllers/projects_controller.rb on lines 36..41

    Duplicated Code

    Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

    Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

    When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

    Tuning

    This issue has a mass of 28.

    We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

    The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

    If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

    See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

    Refactorings

    Further Reading

    Expected '===' and instead saw '=='.
    Open

        if (jsonData.tracker_id == null) {

    Require === and !== (eqeqeq)

    It is considered good practice to use the type-safe equality operators === and !== instead of their regular counterparts == and !=.

    The reason for this is that == and != do type coercion which follows the rather obscure Abstract Equality Comparison Algorithm. For instance, the following statements are all considered true:

    • [] == false
    • [] == ![]
    • 3 == "03"

    If one of those occurs in an innocent-looking statement such as a == b the actual problem is very difficult to spot.

    Rule Details

    This rule is aimed at eliminating the type-unsafe equality operators.

    Examples of incorrect code for this rule:

    /*eslint eqeqeq: "error"*/
    
    if (x == 42) { }
    
    if ("" == text) { }
    
    if (obj.getStuff() != undefined) { }

    The --fix option on the command line automatically fixes some problems reported by this rule. A problem is only fixed if one of the operands is a typeof expression, or if both operands are literals with the same type.

    Options

    always

    The "always" option (default) enforces the use of === and !== in every situation (except when you opt-in to more specific handling of null [see below]).

    Examples of incorrect code for the "always" option:

    /*eslint eqeqeq: ["error", "always"]*/
    
    a == b
    foo == true
    bananas != 1
    value == undefined
    typeof foo == 'undefined'
    'hello' != 'world'
    0 == 0
    true == true
    foo == null

    Examples of correct code for the "always" option:

    /*eslint eqeqeq: ["error", "always"]*/
    
    a === b
    foo === true
    bananas !== 1
    value === undefined
    typeof foo === 'undefined'
    'hello' !== 'world'
    0 === 0
    true === true
    foo === null

    This rule optionally takes a second argument, which should be an object with the following supported properties:

    • "null": Customize how this rule treats null literals. Possible values:
      • always (default) - Always use === or !==.
      • never - Never use === or !== with null.
      • ignore - Do not apply this rule to null.

    smart

    The "smart" option enforces the use of === and !== except for these cases:

    • Comparing two literal values
    • Evaluating the value of typeof
    • Comparing against null

    Examples of incorrect code for the "smart" option:

    /*eslint eqeqeq: ["error", "smart"]*/
    
    // comparing two variables requires ===
    a == b
    
    // only one side is a literal
    foo == true
    bananas != 1
    
    // comparing to undefined requires ===
    value == undefined

    Examples of correct code for the "smart" option:

    /*eslint eqeqeq: ["error", "smart"]*/
    
    typeof foo == 'undefined'
    'hello' != 'world'
    0 == 0
    true == true
    foo == null

    allow-null

    Deprecated: Instead of using this option use "always" and pass a "null" option property with value "ignore". This will tell eslint to always enforce strict equality except when comparing with the null literal.

    ["error", "always", {"null": "ignore"}]

    When Not To Use It

    If you don't want to enforce a style for using equality operators, then it's safe to disable this rule. Source: http://eslint.org/docs/rules/

    Severity
    Category
    Status
    Source
    Language