Merge pull request #1243 from cniedzwiedz/squash_test

Fixed XSS in markdown() method
This commit is contained in:
Christian Bruckmayer
2017-03-02 14:01:51 +01:00
committed by GitHub
7 changed files with 61 additions and 1 deletions

View File

@@ -295,7 +295,7 @@ module ApplicationHelper
space_after_headers: true,
no_intra_emphasis: true
}
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, options)
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html: true), options)
markdown.render(text).html_safe
end

View File

@@ -35,4 +35,8 @@ FactoryGirl.define do
end
end
end
factory :event_xss, parent: :event do
abstract { '<div id="divInjectedElement"></div>' }
end
end

View File

@@ -6,4 +6,8 @@ FactoryGirl.define do
description { Faker::Lorem.paragraph }
website_link { Faker::Internet.url }
end
factory :lodging_xss, parent: :lodging do
description { '<div id="divInjectedElement"></div>' }
end
end

View File

@@ -45,4 +45,9 @@ FactoryGirl.define do
end
end
end
factory :user_xss, parent: :user do
biography '<div id="divInjectedElement"></div>'
end
end

View File

@@ -9,4 +9,14 @@ describe 'admin/lodgings/index' do
render
expect(rendered).to include(CGI.escapeHTML(@conference.lodgings.first.name))
end
it 'prevents XSS in lodging description' do
@conference = create(:conference)
@conference.venue = create(:venue)
@conference.lodgings << create(:lodging_xss)
assign :venue, @conference.venue
render
expect(rendered).to_not have_selector('#divInjectedElement')
end
end

View File

@@ -0,0 +1,20 @@
require 'spec_helper'
describe 'proposals/show' do
let!(:conference) { create(:conference) }
let!(:event) { create(:event_xss, program: conference.program, title: 'event1', language: 'English') }
let(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) }
let(:organizer) { create(:user, name: 'test name', email: 'test@email.osem', role_ids: [organizer_role.id]) }
it 'renders proposal information' do
sign_in organizer
assign :conference, conference
assign :event, event
assign :speaker, organizer
render template: 'proposals/show.html.haml'
expect(rendered).to_not have_selector('#divInjectedElement')
end
end

View File

@@ -0,0 +1,17 @@
require 'spec_helper'
describe 'users/show' do
let!(:conference) { create(:conference) }
let(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) }
let(:organizer) { create(:user_xss, name: 'test name', email: 'test@email.osem', role_ids: [organizer_role.id]) }
it 'renders proposal information' do
sign_in organizer
assign :user, organizer
render template: 'users/show.html.haml'
expect(rendered).to_not have_selector('#divInjectedElement')
end
end