secure_headers 1.2.0 → 2.0.2

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.
Files changed (121) hide show
  1. data/.gitignore +4 -8
  2. data/.travis.yml +7 -4
  3. data/Gemfile +6 -9
  4. data/README.md +185 -105
  5. data/Rakefile +11 -116
  6. data/fixtures/rails_3_2_12/Gemfile +0 -8
  7. data/fixtures/rails_3_2_12/app/controllers/things_controller.rb +0 -1
  8. data/fixtures/rails_3_2_12/app/views/layouts/application.html.erb +1 -4
  9. data/fixtures/rails_3_2_12/app/views/other_things/index.html.erb +2 -1
  10. data/fixtures/rails_3_2_12/app/views/things/index.html.erb +1 -21
  11. data/fixtures/rails_3_2_12/config/application.rb +0 -54
  12. data/fixtures/rails_3_2_12/config/environments/test.rb +2 -2
  13. data/fixtures/rails_3_2_12/config/initializers/secure_headers.rb +3 -1
  14. data/fixtures/rails_3_2_12/config/routes.rb +0 -57
  15. data/fixtures/rails_3_2_12/config/script_hashes.yml +5 -0
  16. data/fixtures/rails_3_2_12/config.ru +3 -0
  17. data/fixtures/rails_3_2_12/spec/controllers/other_things_controller_spec.rb +59 -16
  18. data/fixtures/rails_3_2_12/spec/controllers/things_controller_spec.rb +11 -1
  19. data/fixtures/rails_3_2_12/spec/spec_helper.rb +1 -4
  20. data/fixtures/rails_3_2_12_no_init/Gemfile +0 -9
  21. data/fixtures/rails_3_2_12_no_init/app/controllers/other_things_controller.rb +1 -2
  22. data/fixtures/rails_3_2_12_no_init/app/controllers/things_controller.rb +1 -1
  23. data/fixtures/rails_3_2_12_no_init/app/views/layouts/application.html.erb +0 -2
  24. data/fixtures/rails_3_2_12_no_init/app/views/things/index.html.erb +0 -21
  25. data/fixtures/rails_3_2_12_no_init/config/application.rb +0 -51
  26. data/fixtures/rails_3_2_12_no_init/config/environments/test.rb +2 -2
  27. data/fixtures/rails_3_2_12_no_init/config/routes.rb +0 -57
  28. data/fixtures/rails_3_2_12_no_init/spec/controllers/other_things_controller_spec.rb +11 -1
  29. data/fixtures/rails_3_2_12_no_init/spec/controllers/things_controller_spec.rb +10 -0
  30. data/fixtures/rails_3_2_12_no_init/spec/spec_helper.rb +3 -17
  31. data/fixtures/rails_4_1_8/Gemfile +5 -0
  32. data/fixtures/rails_4_1_8/README.rdoc +28 -0
  33. data/fixtures/rails_4_1_8/Rakefile +6 -0
  34. data/fixtures/rails_4_1_8/app/controllers/application_controller.rb +4 -0
  35. data/fixtures/rails_4_1_8/app/controllers/concerns/.keep +0 -0
  36. data/fixtures/rails_4_1_8/app/controllers/other_things_controller.rb +5 -0
  37. data/fixtures/rails_4_1_8/app/controllers/things_controller.rb +5 -0
  38. data/fixtures/rails_4_1_8/app/models/.keep +0 -0
  39. data/fixtures/rails_4_1_8/app/models/concerns/.keep +0 -0
  40. data/fixtures/rails_4_1_8/app/views/layouts/application.html.erb +11 -0
  41. data/fixtures/rails_4_1_8/app/views/other_things/index.html.erb +2 -0
  42. data/fixtures/rails_4_1_8/app/views/things/index.html.erb +1 -0
  43. data/fixtures/rails_4_1_8/config/application.rb +15 -0
  44. data/fixtures/rails_4_1_8/config/boot.rb +4 -0
  45. data/fixtures/rails_4_1_8/config/environment.rb +5 -0
  46. data/fixtures/rails_4_1_8/config/environments/test.rb +10 -0
  47. data/fixtures/rails_4_1_8/config/initializers/secure_headers.rb +17 -0
  48. data/fixtures/rails_4_1_8/config/routes.rb +4 -0
  49. data/fixtures/rails_4_1_8/config/script_hashes.yml +5 -0
  50. data/fixtures/rails_4_1_8/config/secrets.yml +22 -0
  51. data/fixtures/rails_4_1_8/config.ru +4 -0
  52. data/fixtures/rails_4_1_8/lib/assets/.keep +0 -0
  53. data/fixtures/rails_4_1_8/lib/tasks/.keep +0 -0
  54. data/fixtures/rails_4_1_8/log/.keep +0 -0
  55. data/fixtures/rails_4_1_8/spec/controllers/other_things_controller_spec.rb +83 -0
  56. data/fixtures/rails_4_1_8/spec/controllers/things_controller_spec.rb +59 -0
  57. data/fixtures/rails_4_1_8/spec/spec_helper.rb +15 -0
  58. data/fixtures/rails_4_1_8/vendor/assets/javascripts/.keep +0 -0
  59. data/fixtures/rails_4_1_8/vendor/assets/stylesheets/.keep +0 -0
  60. data/lib/secure_headers/hash_helper.rb +7 -0
  61. data/lib/secure_headers/headers/content_security_policy/script_hash_middleware.rb +22 -0
  62. data/lib/secure_headers/headers/content_security_policy.rb +160 -124
  63. data/lib/secure_headers/headers/strict_transport_security.rb +2 -1
  64. data/lib/secure_headers/headers/x_download_options.rb +39 -0
  65. data/lib/secure_headers/headers/x_permitted_cross_domain_policies.rb +40 -0
  66. data/lib/secure_headers/headers/x_xss_protection.rb +2 -1
  67. data/lib/secure_headers/padrino.rb +14 -0
  68. data/lib/secure_headers/railtie.rb +19 -24
  69. data/lib/secure_headers/version.rb +1 -1
  70. data/lib/secure_headers/view_helper.rb +68 -0
  71. data/lib/secure_headers.rb +65 -16
  72. data/lib/tasks/tasks.rake +48 -0
  73. data/secure_headers.gemspec +4 -4
  74. data/spec/lib/secure_headers/headers/content_security_policy/script_hash_middleware_spec.rb +47 -0
  75. data/spec/lib/secure_headers/headers/content_security_policy_spec.rb +119 -204
  76. data/spec/lib/secure_headers/headers/strict_transport_security_spec.rb +1 -0
  77. data/spec/lib/secure_headers/headers/x_download_options_spec.rb +32 -0
  78. data/spec/lib/secure_headers/headers/x_permitted_cross_domain_policies_spec.rb +64 -0
  79. data/spec/lib/secure_headers/headers/x_xss_protection_spec.rb +2 -1
  80. data/spec/lib/secure_headers_spec.rb +61 -66
  81. data/spec/spec_helper.rb +29 -17
  82. metadata +55 -47
  83. checksums.yaml +0 -15
  84. data/Guardfile +0 -6
  85. data/HISTORY.md +0 -131
  86. data/app/controllers/content_security_policy_controller.rb +0 -75
  87. data/config/curl-ca-bundle.crt +0 -5420
  88. data/config/routes.rb +0 -3
  89. data/fixtures/rails_3_2_12/Guardfile +0 -14
  90. data/fixtures/rails_3_2_12/app/models/thing.rb +0 -3
  91. data/fixtures/rails_3_2_12/config/database.yml +0 -25
  92. data/fixtures/rails_3_2_12/config/environments/development.rb +0 -37
  93. data/fixtures/rails_3_2_12/config/environments/production.rb +0 -67
  94. data/fixtures/rails_3_2_12/config/initializers/backtrace_silencers.rb +0 -7
  95. data/fixtures/rails_3_2_12/config/initializers/inflections.rb +0 -15
  96. data/fixtures/rails_3_2_12/config/initializers/mime_types.rb +0 -5
  97. data/fixtures/rails_3_2_12/config/initializers/secret_token.rb +0 -7
  98. data/fixtures/rails_3_2_12/config/initializers/session_store.rb +0 -8
  99. data/fixtures/rails_3_2_12/config/initializers/wrap_parameters.rb +0 -14
  100. data/fixtures/rails_3_2_12/config/locales/en.yml +0 -5
  101. data/fixtures/rails_3_2_12/db/schema.rb +0 -16
  102. data/fixtures/rails_3_2_12/db/seeds.rb +0 -7
  103. data/fixtures/rails_3_2_12_no_init/Guardfile +0 -14
  104. data/fixtures/rails_3_2_12_no_init/app/models/thing.rb +0 -3
  105. data/fixtures/rails_3_2_12_no_init/app/views/things/_form.html.erb +0 -17
  106. data/fixtures/rails_3_2_12_no_init/app/views/things/edit.html.erb +0 -6
  107. data/fixtures/rails_3_2_12_no_init/app/views/things/new.html.erb +0 -5
  108. data/fixtures/rails_3_2_12_no_init/app/views/things/show.html.erb +0 -5
  109. data/fixtures/rails_3_2_12_no_init/config/database.yml +0 -25
  110. data/fixtures/rails_3_2_12_no_init/config/environments/development.rb +0 -37
  111. data/fixtures/rails_3_2_12_no_init/config/environments/production.rb +0 -67
  112. data/fixtures/rails_3_2_12_no_init/config/initializers/backtrace_silencers.rb +0 -7
  113. data/fixtures/rails_3_2_12_no_init/config/initializers/inflections.rb +0 -15
  114. data/fixtures/rails_3_2_12_no_init/config/initializers/mime_types.rb +0 -5
  115. data/fixtures/rails_3_2_12_no_init/config/initializers/secret_token.rb +0 -7
  116. data/fixtures/rails_3_2_12_no_init/config/initializers/session_store.rb +0 -8
  117. data/fixtures/rails_3_2_12_no_init/config/initializers/wrap_parameters.rb +0 -14
  118. data/fixtures/rails_3_2_12_no_init/config/locales/en.yml +0 -5
  119. data/fixtures/rails_3_2_12_no_init/db/schema.rb +0 -16
  120. data/fixtures/rails_3_2_12_no_init/db/seeds.rb +0 -7
  121. data/spec/controllers/content_security_policy_controller_spec.rb +0 -90
@@ -1,75 +0,0 @@
1
- require 'net/https'
2
- require 'openssl'
3
-
4
- class ContentSecurityPolicyController < ActionController::Base
5
- CA_FILE = File.expand_path(File.join('..','..', '..', 'config', 'curl-ca-bundle.crt'), __FILE__)
6
-
7
- def scribe
8
- csp = ::SecureHeaders::Configuration.csp || {}
9
-
10
- forward_endpoint = csp[:forward_endpoint]
11
- if forward_endpoint
12
- forward_params_to(forward_endpoint)
13
- end
14
-
15
- head :ok
16
- rescue StandardError => e
17
- log_warning(forward_endpoint, e)
18
- head :bad_request
19
- end
20
-
21
- private
22
-
23
- def forward_params_to(forward_endpoint)
24
- uri = URI.parse(forward_endpoint)
25
- http = Net::HTTP.new(uri.host, uri.port)
26
- if uri.scheme == 'https'
27
- use_ssl(http)
28
- end
29
-
30
- if request.content_type == "application/csp-report"
31
- request.body.rewind
32
- params.merge!(ActiveSupport::JSON.decode(request.body.read))
33
- end
34
-
35
- ua = request.user_agent
36
- xff = forwarded_for
37
-
38
- request = Net::HTTP::Post.new(uri.to_s)
39
- request.initialize_http_header({
40
- 'User-Agent' => ua,
41
- 'X-Forwarded-For' => xff,
42
- 'Content-Type' => 'application/json',
43
- })
44
- request.body = params.to_json
45
-
46
- # fire and forget
47
- if defined?(Delayed::Job)
48
- http.delay.request(request)
49
- else
50
- http.request(request)
51
- end
52
- end
53
-
54
- def forwarded_for
55
- req_xff = request.env["HTTP_X_FORWARDED_FOR"]
56
- if req_xff && req_xff != ""
57
- "#{req_xff}, #{request.remote_ip}"
58
- else
59
- request.remote_ip
60
- end
61
- end
62
-
63
- def use_ssl request
64
- request.use_ssl = true
65
- request.ca_file = CA_FILE
66
- request.verify_mode = OpenSSL::SSL::VERIFY_PEER
67
- request.verify_depth = 9
68
- end
69
-
70
- def log_warning(forward_endpoint, e)
71
- if defined?(Rails.logger)
72
- Rails.logger.warn("Unable to POST CSP report to #{forward_endpoint} because #{e}")
73
- end
74
- end
75
- end