Skip to content

Commit

Permalink
Limit spamming via unconfirmed email confirmation resend (#4721)
Browse files Browse the repository at this point in the history
  • Loading branch information
martinemde committed May 19, 2024
1 parent bdc4165 commit 3c3aa80
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
14 changes: 11 additions & 3 deletions config/initializers/rack_attack.rb
Original file line number Diff line number Diff line change
Expand Up @@ -208,11 +208,19 @@ def self.api_key_owner_id(req)
end
end

protected_confirmation_action = [{ controller: "email_confirmations", action: "create" }]
protected_confirmation_action = [
{ controller: "email_confirmations", action: "create" },
{ controller: "email_confirmations", action: "unconfirmed" }
]

throttle("email_confirmations/email", limit: REQUEST_LIMIT_PER_EMAIL, period: LIMIT_PERIOD) do |req|
if protected_route?(protected_confirmation_action, req.path, req.request_method) && req.params['email_confirmation']
User.normalize_email(req.params['email_confirmation']['email']).presence
if protected_route?(protected_confirmation_action, req.path, req.request_method)
if req.params['email_confirmation']
User.normalize_email(req.params['email_confirmation']['email']).presence
else
action_dispatch_req = ActionDispatch::Request.new(req.env)
User.find_by_remember_token(action_dispatch_req.cookie_jar.signed["remember_token"])&.email.presence
end
end
end

Expand Down
11 changes: 11 additions & 0 deletions test/integration/rack_attack_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,17 @@ class RackAttackTest < ActionDispatch::IntegrationTest
assert_response :success
end

should "allow email confirmation resend via unconfirmed" do
stay_under_limit_for("clearance/ip/1")
stay_under_email_limit_for("email_confirmations/email")

patch "/email_confirmations/unconfirmed",
headers: { REMOTE_ADDR: @ip_address }
follow_redirect!

assert_response :success
end

context "owners requests" do
setup do
post session_path(session: { who: @user.handle, password: PasswordHelpers::SECURE_TEST_PASSWORD })
Expand Down

0 comments on commit 3c3aa80

Please sign in to comment.