1
0
Fork 0
mirror of https://github.com/simi/omniauth-facebook.git synced 2022-11-09 12:32:45 -05:00

fix CSRF vulnerability. prepare 1.5.0 release

This commit is contained in:
Mark Dodwell 2013-11-12 13:15:58 -08:00
parent 48455110d6
commit ccfcc26fe7
5 changed files with 9 additions and 20 deletions

View file

@ -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`. 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 ### 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. 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.

View file

@ -1,5 +1,5 @@
module OmniAuth module OmniAuth
module Facebook module Facebook
VERSION = "1.4.1" VERSION = "1.5.0"
end end
end end

View file

@ -112,7 +112,7 @@ module OmniAuth
end 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 # you need to set them dynamically. You can also set these options
# in the OmniAuth config :authorize_params option. # in the OmniAuth config :authorize_params option.
# #
@ -120,12 +120,9 @@ module OmniAuth
# #
def authorize_params def authorize_params
super.tap do |params| super.tap do |params|
%w[display state scope].each do |v| %w[display scope].each do |v|
if request.params[v] if request.params[v]
params[v.to_sym] = 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
end end

View file

@ -50,20 +50,20 @@ module OAuth2StrategyTests
assert_equal strategy.authorize_params['state'], strategy.session['omniauth.state'] assert_equal strategy.authorize_params['state'], strategy.session['omniauth.state']
end 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' } } @options = { :authorize_params => { :state => 'bar' } }
refute_empty strategy.authorize_params['state'] 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'] refute_empty strategy.session['omniauth.state']
assert_equal 'bar', strategy.session['omniauth.state'] refute_equal 'bar', strategy.session['omniauth.state']
end 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' }) @request.stubs(:params).returns({ 'state' => 'foo' })
refute_empty strategy.authorize_params['state'] 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'] refute_empty strategy.session['omniauth.state']
assert_equal 'foo', strategy.session['omniauth.state'] refute_equal 'foo', strategy.session['omniauth.state']
end end
end end

View file

@ -56,12 +56,6 @@ class AuthorizeParamsTest < StrategyTestCase
assert_equal 'touch', strategy.authorize_params[:display] assert_equal 'touch', strategy.authorize_params[:display]
end 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 test 'overrides default scope with parameter passed from request' do
@request.stubs(:params).returns({ 'scope' => 'email' }) @request.stubs(:params).returns({ 'scope' => 'email' })
assert strategy.authorize_params.is_a?(Hash) assert strategy.authorize_params.is_a?(Hash)