safe_redirect 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/safe_redirect/safe_redirect.rb +12 -14
- data/lib/safe_redirect/version.rb +1 -1
- data/spec/lib/safe_redirect/safe_redirect_spec.rb +9 -4
- metadata +2 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 432d56c2fe2e256b7040f00a82822d9778ef257c
         | 
| 4 | 
            +
              data.tar.gz: 4cd2ccdf44e92e79d613b5ad960b81f486a80009
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e615e2700b962aae967a8894aef1af26484d5ccf7ba1b4c8868090ea49f426f9007ec0e5950f93dc20cb7624049c3d0129fe963470be00073da1f741de92b023
         | 
| 7 | 
            +
              data.tar.gz: 71d7558aac96b2a794daf3edb895998b8321b4e03fbde1ed182964612171d8252469034d6927ebc483b7a7b04b682466fd16da987c31c3be71321ba27ce9e2fb
         | 
    
        data/README.md
    CHANGED
    
    | @@ -27,7 +27,7 @@ Add this line to the controllers you wish to secure from open redirection. | |
| 27 27 | 
             
            include SafeRedirect
         | 
| 28 28 | 
             
            ```
         | 
| 29 29 |  | 
| 30 | 
            -
            The `redirect_to` method provided by Rails will be  | 
| 30 | 
            +
            The `redirect_to` method provided by Rails will be overridden by `safe_redirect`'s `redirect_to` method.
         | 
| 31 31 |  | 
| 32 32 | 
             
            ```rb
         | 
| 33 33 | 
             
            redirect_to 'https://www.google.com' # => redirects to https://www.google.com
         | 
| @@ -1,16 +1,16 @@ | |
| 1 | 
            +
            require 'uri'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module SafeRedirect
         | 
| 2 | 
            -
              def safe_domain?( | 
| 3 | 
            -
                 | 
| 4 | 
            -
                SafeRedirect.configuration.domain_whitelists. | 
| 5 | 
            -
                  path =~ /^https?:\/\/#{Regexp.escape(w)}($|\/.*)/i
         | 
| 6 | 
            -
                end
         | 
| 4 | 
            +
              def safe_domain?(uri)
         | 
| 5 | 
            +
                return true if uri.host.nil? && uri.scheme.nil?
         | 
| 6 | 
            +
                SafeRedirect.configuration.domain_whitelists.include?(uri.host)
         | 
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
| 9 9 | 
             
              def safe_path(path)
         | 
| 10 | 
            -
                case
         | 
| 11 | 
            -
                when  | 
| 10 | 
            +
                case path
         | 
| 11 | 
            +
                when String
         | 
| 12 12 | 
             
                  clean_path(path)
         | 
| 13 | 
            -
                when  | 
| 13 | 
            +
                when Symbol, Hash
         | 
| 14 14 | 
             
                  path
         | 
| 15 15 | 
             
                else
         | 
| 16 16 | 
             
                  SafeRedirect.configuration.default_path
         | 
| @@ -26,11 +26,9 @@ module SafeRedirect | |
| 26 26 | 
             
              private
         | 
| 27 27 |  | 
| 28 28 | 
             
              def clean_path(path)
         | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
                stripped_path.empty? ? '/' : stripped_path
         | 
| 29 | 
            +
                uri = URI.parse(path)
         | 
| 30 | 
            +
                safe_domain?(uri) ? path : '/'
         | 
| 31 | 
            +
              rescue URI::InvalidURIError
         | 
| 32 | 
            +
                '/'
         | 
| 35 33 | 
             
              end
         | 
| 36 34 | 
             
            end
         | 
| @@ -13,15 +13,20 @@ module SafeRedirect | |
| 13 13 | 
             
                SAFE_PATHS = [
         | 
| 14 14 | 
             
                  'https://www.bukalapak.com',
         | 
| 15 15 | 
             
                  '/',
         | 
| 16 | 
            +
                  '/foobar',
         | 
| 16 17 | 
             
                  'http://www.twitter.com',
         | 
| 17 18 | 
             
                  :back,
         | 
| 18 19 | 
             
                  { controller: 'home', action: 'index' }
         | 
| 19 20 | 
             
                ]
         | 
| 20 21 |  | 
| 21 | 
            -
                UNSAFE_PATHS =  | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 22 | 
            +
                UNSAFE_PATHS = [
         | 
| 23 | 
            +
                  "https://www.bukalapak.com@google.com",
         | 
| 24 | 
            +
                  "http://////@@@@@@attacker.com//evil.com",
         | 
| 25 | 
            +
                  "//bukalapak.com%25%40%25%40%25%40%25%40%25%40%25%40%25%40evil.com",
         | 
| 26 | 
            +
                  "%@%@%@%@%@%@%@%@%@%@evil.com",
         | 
| 27 | 
            +
                  "https://www-bukalapak.com",
         | 
| 28 | 
            +
                  "https://www.bukalapak.com\n.evil.com",
         | 
| 29 | 
            +
                ]
         | 
| 25 30 |  | 
| 26 31 | 
             
                SAFE_PATHS.each do |path|
         | 
| 27 32 | 
             
                  it "considers #{path} a safe path" do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: safe_redirect
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Edwin Tunggawan
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-08-05 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rspec
         | 
| @@ -71,4 +71,3 @@ test_files: | |
| 71 71 | 
             
            - spec/lib/safe_redirect/configuration_spec.rb
         | 
| 72 72 | 
             
            - spec/lib/safe_redirect/safe_redirect_spec.rb
         | 
| 73 73 | 
             
            - spec/spec_helper.rb
         | 
| 74 | 
            -
            has_rdoc: 
         |