c1c1496405
It's possible that user pastes accidentally also unsubscribe link which is included in footer of notification emails. This unsubscribe link contains personal token which attacker then use to act as the original user (e.g. for sending comments under his/her identity).
33 lines
854 B
Ruby
33 lines
854 B
Ruby
# frozen_string_literal: true
|
|
|
|
# This module searches and redacts sensitive information in
|
|
# redactable fields. Currently only unsubscribe link is redacted.
|
|
# Add following lines into your model:
|
|
#
|
|
# include Redactable
|
|
# redact_field :foo
|
|
#
|
|
module Redactable
|
|
extend ActiveSupport::Concern
|
|
|
|
UNSUBSCRIBE_PATTERN = %r{/sent_notifications/\h{32}/unsubscribe}
|
|
|
|
class_methods do
|
|
def redact_field(field)
|
|
before_validation do
|
|
redact_field!(field) if attribute_changed?(field)
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def redact_field!(field)
|
|
text = public_send(field) # rubocop:disable GitlabSecurity/PublicSend
|
|
return unless text.present?
|
|
|
|
redacted = text.gsub(UNSUBSCRIBE_PATTERN, '/sent_notifications/REDACTED/unsubscribe')
|
|
|
|
public_send("#{field}=", redacted) # rubocop:disable GitlabSecurity/PublicSend
|
|
end
|
|
end
|