Skip to content

Commit

Permalink
fix CSRF vulnerability. prepare 1.5.0 release
Browse files Browse the repository at this point in the history
  • Loading branch information
mkdynamic committed Nov 12, 2013
1 parent 4845511 commit ccfcc26
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 20 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ end

If you want to set the `display` format or `scope` on a per-request basis, you can just pass it to the OmniAuth request phase URL, for example: `/auth/facebook?display=popup` or `/auth/facebook?scope=email`.

You can also pass through a `state` param which will be passed along to the callback url.

### Custom Callback URL/Path

You can set a custom `callback_url` or `callback_path` option to override the default value. See [OmniAuth::Strategy#callback_url](https://github.com/intridea/omniauth/blob/master/lib/omniauth/strategy.rb#L411) for more details on the default.
Expand Down
2 changes: 1 addition & 1 deletion lib/omniauth/facebook/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module OmniAuth
module Facebook
VERSION = "1.4.1"
VERSION = "1.5.0"
end
end
7 changes: 2 additions & 5 deletions lib/omniauth/strategies/facebook.rb
Original file line number Diff line number Diff line change
Expand Up @@ -112,20 +112,17 @@ def access_token_options
end

##
# You can pass +display+, +state+ or +scope+ params to the auth request, if
# You can pass +display+ or +scope+ params to the auth request, if
# you need to set them dynamically. You can also set these options
# in the OmniAuth config :authorize_params option.
#
# /auth/facebook?display=popup&state=ABC
#
def authorize_params
super.tap do |params|
%w[display state scope].each do |v|
%w[display scope].each do |v|
if request.params[v]
params[v.to_sym] = request.params[v]

# to support omniauth-oauth2's auto csrf protection
session['omniauth.state'] = params[:state] if v == 'state'
end
end

Expand Down
12 changes: 6 additions & 6 deletions test/support/shared_examples.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,20 @@ module CSRFAuthorizeParamsTests
assert_equal strategy.authorize_params['state'], strategy.session['omniauth.state']
end

test 'should store state in the session when present in authorize params vs. a random one' do
test 'should not store state in the session when present in authorize params vs. a random one' do
@options = { :authorize_params => { :state => 'bar' } }
refute_empty strategy.authorize_params['state']
assert_equal 'bar', strategy.authorize_params[:state]
refute_equal 'bar', strategy.authorize_params[:state]
refute_empty strategy.session['omniauth.state']
assert_equal 'bar', strategy.session['omniauth.state']
refute_equal 'bar', strategy.session['omniauth.state']
end

test 'should store state in the session when present in request params vs. a random one' do
test 'should not store state in the session when present in request params vs. a random one' do
@request.stubs(:params).returns({ 'state' => 'foo' })
refute_empty strategy.authorize_params['state']
assert_equal 'foo', strategy.authorize_params[:state]
refute_equal 'foo', strategy.authorize_params[:state]
refute_empty strategy.session['omniauth.state']
assert_equal 'foo', strategy.session['omniauth.state']
refute_equal 'foo', strategy.session['omniauth.state']
end
end

Expand Down
6 changes: 0 additions & 6 deletions test/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,6 @@ class AuthorizeParamsTest < StrategyTestCase
assert_equal 'touch', strategy.authorize_params[:display]
end

test 'includes state parameter from request when present' do
@request.stubs(:params).returns({ 'state' => 'some_state' })
assert strategy.authorize_params.is_a?(Hash)
assert_equal 'some_state', strategy.authorize_params[:state]
end

test 'overrides default scope with parameter passed from request' do
@request.stubs(:params).returns({ 'scope' => 'email' })
assert strategy.authorize_params.is_a?(Hash)
Expand Down

0 comments on commit ccfcc26

Please sign in to comment.