diff options
author | Imre Farkas <ifarkas@gitlab.com> | 2018-06-15 10:44:59 +0200 |
---|---|---|
committer | Imre Farkas <ifarkas@gitlab.com> | 2018-06-15 14:26:48 +0200 |
commit | 1fbf6f186948e29dfcd09332a083962904e674ae (patch) | |
tree | d4795b2e3ae2cf3d2e14674a676b011f01613de0 | |
parent | a8445cc29d81f8d8169e93cd4ef6692aa0fef1fb (diff) | |
download | gitlab-ce-1fbf6f186948e29dfcd09332a083962904e674ae.tar.gz |
HTML escape the name of the user in ProjectsHelper#link_to_member
-rw-r--r-- | app/helpers/projects_helper.rb | 3 | ||||
-rw-r--r-- | changelogs/unreleased/security-html_escape_usernames.yml | 5 | ||||
-rw-r--r-- | spec/helpers/projects_helper_spec.rb | 9 |
3 files changed, 15 insertions, 2 deletions
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index daad829faa2..9ac446d75ea 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -40,7 +40,8 @@ module ProjectsHelper name_tag_options[:class] << 'has-tooltip' end - content_tag(:span, sanitize(username), name_tag_options) + # NOTE: ActionView::Helpers::TagHelper#content_tag HTML escapes username + content_tag(:span, username, name_tag_options) end def link_to_member(project, author, opts = {}, &block) diff --git a/changelogs/unreleased/security-html_escape_usernames.yml b/changelogs/unreleased/security-html_escape_usernames.yml new file mode 100644 index 00000000000..7e69e4ae266 --- /dev/null +++ b/changelogs/unreleased/security-html_escape_usernames.yml @@ -0,0 +1,5 @@ +--- +title: HTML escape the name of the user in ProjectsHelper#link_to_member +merge_request: +author: +type: security diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 5cf9e9e8f12..80147b13739 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -248,7 +248,7 @@ describe ProjectsHelper do describe '#link_to_member' do let(:group) { build_stubbed(:group) } let(:project) { build_stubbed(:project, group: group) } - let(:user) { build_stubbed(:user) } + let(:user) { build_stubbed(:user, name: '<h1>Administrator</h1>') } describe 'using the default options' do it 'returns an HTML link to the user' do @@ -256,6 +256,13 @@ describe ProjectsHelper do expect(link).to match(%r{/#{user.username}}) end + + it 'HTML escapes the name of the user' do + link = helper.link_to_member(project, user) + + expect(link).to include(ERB::Util.html_escape(user.name)) + expect(link).not_to include(user.name) + end end end |